summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Trott <rtrott@gmail.com>2021-08-21 07:09:43 -0700
committerMichaël Zasso <targos@protonmail.com>2021-09-04 15:14:55 +0200
commite9b1a006a11c875c5c0f13568f7f081db7e9f01d (patch)
tree1011100ce8ce706bcbe2a289e4ce0db20a44374b
parent67f1bff657634ce3337b83cb31da6bf7d885aab7 (diff)
downloadnode-new-e9b1a006a11c875c5c0f13568f7f081db7e9f01d.tar.gz
tools: fix markdown linting
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 <daijiro.wachi@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
-rw-r--r--.eslintignore2
-rw-r--r--Makefile2
-rw-r--r--tools/lint-md.mjs (renamed from tools/lint-md.js)66005
-rw-r--r--tools/node-lint-md-cli-rollup/package-lock.json2922
-rw-r--r--tools/node-lint-md-cli-rollup/package.json2
-rw-r--r--tools/node-lint-md-cli-rollup/rollup.config.js22
-rw-r--r--vcbuild.bat2
7 files changed, 30804 insertions, 38153 deletions
diff --git a/.eslintignore b/.eslintignore
index 19e0fcee9e..e8b8c3f297 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 f346a4d61f..c25a97750f 100644
--- a/Makefile
+++ b/Makefile
@@ -1201,7 +1201,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
index 1f865ab809..b614ae37d8 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,218 +36,8605 @@ 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 ansiStyles$2 = {exports: {}};
-var vfileStatistics = statistics$2;
+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]
+};
-// Get stats for a file, list of files, or list of messages.
-function statistics$2(files) {
- var result = {true: 0, false: 0, null: 0};
+/* MIT license */
+
+/* eslint-disable no-mixed-operators */
+const cssKeywords$1 = colorName$1;
- count(files);
+// 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.)
- return {
- fatal: result.true,
- nonfatal: result.false + result.null,
- warn: result.false,
- info: result.null,
- total: result.true + result.false + result.null
+const reverseKeywords$1 = {};
+for (const key of Object.keys(cssKeywords$1)) {
+ reverseKeywords$1[cssKeywords$1[key]] = key;
+}
+
+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']}
+};
+
+var conversions$5 = convert$4;
+
+// 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);
+ }
+
+ if (!('labels' in convert$4[model])) {
+ throw new Error('missing channel labels property: ' + model);
+ }
+
+ if (convert$4[model].labels.length !== convert$4[model].channels) {
+ throw new Error('channel and label counts mismatch: ' + model);
+ }
+
+ 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});
+}
+
+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;
+
+ 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;
+ }
+
+ h = Math.min(h * 60, 360);
+
+ if (h < 0) {
+ h += 360;
+ }
+
+ const l = (min + max) / 2;
+
+ if (max === min) {
+ s = 0;
+ } else if (l <= 0.5) {
+ s = delta / (max + min);
+ } else {
+ s = delta / (2 - max - min);
+ }
+
+ return [h, s * 100, l * 100];
+};
+
+convert$4.rgb.hsv = function (rgb) {
+ let rdif;
+ let gdif;
+ let bdif;
+ let h;
+ let s;
+
+ 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 (diff === 0) {
+ h = 0;
+ s = 0;
+ } else {
+ s = diff / v;
+ rdif = diffc(r);
+ gdif = diffc(g);
+ bdif = diffc(b);
+
+ 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;
+ }
+ }
+
+ return [
+ h * 360,
+ s * 100,
+ v * 100
+ ];
+};
+
+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));
+
+ b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
+
+ return [h, w * 100, b * 100];
+};
+
+convert$4.rgb.cmyk = function (rgb) {
+ const r = rgb[0] / 255;
+ const g = rgb[1] / 255;
+ const b = rgb[2] / 255;
+
+ 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;
+
+ return [c * 100, m * 100, y * 100, k * 100];
+};
+
+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;
+ }
+
+ let currentClosestDistance = Infinity;
+ let currentClosestKeyword;
+
+ for (const keyword of Object.keys(cssKeywords$1)) {
+ const value = cssKeywords$1[keyword];
+
+ // Compute comparative distance
+ const distance = comparativeDistance$1(rgb, value);
+
+ // Check if its less, if so set as closest
+ if (distance < currentClosestDistance) {
+ currentClosestDistance = distance;
+ currentClosestKeyword = keyword;
+ }
+ }
+
+ return currentClosestKeyword;
+};
+
+convert$4.keyword.rgb = function (keyword) {
+ return cssKeywords$1[keyword];
+};
+
+convert$4.rgb.xyz = function (rgb) {
+ let r = rgb[0] / 255;
+ let g = rgb[1] / 255;
+ let b = rgb[2] / 255;
+
+ // 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 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];
+};
+
+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;
+
+ 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);
+
+ 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;
+
+ if (s === 0) {
+ val = l * 255;
+ return [val, val, val];
+ }
+
+ if (l < 0.5) {
+ t2 = l * (1 + s);
+ } else {
+ t2 = l + s - l * s;
+ }
+
+ const t1 = 2 * l - t2;
+
+ 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--;
+ }
+
+ 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;
+ }
+
+ return rgb;
+};
+
+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);
+
+ 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 [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;
+
+ 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;
+
+ 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;
+
+ l = (2 - s) * v;
+ const lmin = (2 - s) * vmin;
+ sl = s * vmin;
+ sl /= (lmin <= 1) ? lmin : 2 - lmin;
+ sl = sl || 0;
+ l /= 2;
+
+ return [h, sl * 100, l * 100];
+};
+
+// 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;
+
+ // Wh + bl cant be > 1
+ if (ratio > 1) {
+ wh /= ratio;
+ bl /= ratio;
+ }
+
+ const i = Math.floor(6 * h);
+ const v = 1 - bl;
+ f = 6 * h - i;
+
+ if ((i & 0x01) !== 0) {
+ f = 1 - f;
+ }
+
+ const n = wh + f * (v - wh); // Linear interpolation
+
+ 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 [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;
+
+ 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 [r * 255, g * 255, b * 255];
+};
+
+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;
+
+ 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);
+
+ // Assume sRGB
+ r = r > 0.0031308
+ ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)
+ : r * 12.92;
+
+ 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;
+
+ 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 [r * 255, g * 255, b * 255];
+};
+
+convert$4.xyz.lab = function (xyz) {
+ let x = xyz[0];
+ let y = xyz[1];
+ let z = xyz[2];
+
+ x /= 95.047;
+ y /= 100;
+ z /= 108.883;
+
+ 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);
+
+ return [l, a, b];
+};
+
+convert$4.lab.xyz = function (lab) {
+ const l = lab[0];
+ const a = lab[1];
+ const b = lab[2];
+ let x;
+ let y;
+ let z;
+
+ y = (l + 16) / 116;
+ x = a / 500 + y;
+ z = y - b / 200;
+
+ 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;
+
+ x *= 95.047;
+ y *= 100;
+ z *= 108.883;
+
+ return [x, y, z];
+};
+
+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;
+
+ if (h < 0) {
+ h += 360;
+ }
+
+ const c = Math.sqrt(a * a + b * b);
+
+ return [l, c, h];
+};
+
+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);
+
+ 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
+
+ value = Math.round(value / 50);
+
+ if (value === 0) {
+ return 30;
+ }
+
+ let ansi = 30
+ + ((Math.round(b / 255) << 2)
+ | (Math.round(g / 255) << 1)
+ | Math.round(r / 255));
+
+ if (value === 2) {
+ ansi += 60;
+ }
+
+ return ansi;
+};
+
+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]);
+};
+
+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;
+ }
+
+ if (r > 248) {
+ return 231;
+ }
+
+ return Math.round(((r - 8) / 247) * 24) + 232;
+ }
+
+ const ansi = 16
+ + (36 * Math.round(r / 255 * 5))
+ + (6 * Math.round(g / 255 * 5))
+ + Math.round(b / 255 * 5);
+
+ return ansi;
+};
+
+convert$4.ansi16.rgb = function (args) {
+ let color = args % 10;
+
+ // Handle greyscale
+ if (color === 0 || color === 7) {
+ if (args > 50) {
+ color += 3.5;
+ }
+
+ color = color / 10.5 * 255;
+
+ return [color, color, color];
+ }
+
+ 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 [r, g, b];
+};
+
+convert$4.ansi256.rgb = function (args) {
+ // Handle greyscale
+ if (args >= 232) {
+ const c = (args - 232) * 10 + 8;
+ return [c, c, c];
+ }
+
+ args -= 16;
+
+ 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;
+
+ return [r, g, b];
+};
+
+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);
+
+ const string = integer.toString(16).toUpperCase();
+ return '000000'.substring(string.length) + string;
+};
+
+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];
+ }
+
+ let colorString = match[0];
+
+ 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;
+
+ return [r, g, b];
+};
+
+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;
+
+ if (chroma < 1) {
+ grayscale = min / (1 - chroma);
+ } else {
+ grayscale = 0;
+ }
+
+ 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;
+ }
+
+ hue /= 6;
+ hue %= 1;
+
+ return [hue * 360, chroma * 100, grayscale * 100];
+};
+
+convert$4.hsl.hcg = function (hsl) {
+ const s = hsl[1] / 100;
+ const l = hsl[2] / 100;
+
+ const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));
+
+ let f = 0;
+ if (c < 1.0) {
+ f = (l - 0.5 * c) / (1.0 - c);
+ }
+
+ return [hsl[0], c * 100, f * 100];
+};
+
+convert$4.hsv.hcg = function (hsv) {
+ const s = hsv[1] / 100;
+ const v = hsv[2] / 100;
+
+ const c = s * v;
+ let f = 0;
+
+ if (c < 1.0) {
+ f = (v - c) / (1 - c);
+ }
+
+ return [hsv[0], c * 100, f * 100];
+};
+
+convert$4.hcg.rgb = function (hcg) {
+ const h = hcg[0] / 360;
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
+
+ if (c === 0.0) {
+ return [g * 255, g * 255, g * 255];
+ }
+
+ const pure = [0, 0, 0];
+ const hi = (h % 1) * 6;
+ const v = hi % 1;
+ const w = 1 - v;
+ let mg = 0;
+
+ /* 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 */
+
+ mg = (1.0 - c) * g;
+
+ return [
+ (c * pure[0] + mg) * 255,
+ (c * pure[1] + mg) * 255,
+ (c * pure[2] + mg) * 255
+ ];
+};
+
+convert$4.hcg.hsv = function (hcg) {
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
+
+ const v = c + g * (1.0 - c);
+ let f = 0;
+
+ if (v > 0.0) {
+ f = c / v;
+ }
+
+ return [hcg[0], f * 100, v * 100];
+};
+
+convert$4.hcg.hsl = function (hcg) {
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
+
+ const l = g * (1.0 - c) + 0.5 * c;
+ let s = 0;
+
+ 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];
+};
+
+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];
+};
+
+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;
+
+ if (c < 1) {
+ g = (v - c) / (1 - c);
+ }
+
+ return [hwb[0], c * 100, g * 100];
+};
+
+convert$4.apple.rgb = function (apple) {
+ return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
+};
+
+convert$4.rgb.apple = function (rgb) {
+ return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
+};
+
+convert$4.gray.rgb = function (args) {
+ return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
+};
+
+convert$4.gray.hsl = function (args) {
+ return [0, 0, args[0]];
+};
+
+convert$4.gray.hsv = convert$4.gray.hsl;
+
+convert$4.gray.hwb = function (gray) {
+ return [0, 100, gray[0]];
+};
+
+convert$4.gray.cmyk = function (gray) {
+ return [0, 0, 0, gray[0]];
+};
+
+convert$4.gray.lab = function (gray) {
+ return [gray[0], 0, 0];
+};
+
+convert$4.gray.hex = function (gray) {
+ const val = Math.round(gray[0] / 100 * 255) & 0xFF;
+ const integer = (val << 16) + (val << 8) + val;
+
+ const string = integer.toString(16).toUpperCase();
+ return '000000'.substring(string.length) + string;
+};
+
+convert$4.rgb.gray = function (rgb) {
+ const val = (rgb[0] + rgb[1] + rgb[2]) / 3;
+ return [val / 255 * 100];
+};
+
+const conversions$4 = conversions$5;
+
+/*
+ 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() {
+ const graph = {};
+ // https://jsperf.com/object-keys-vs-for-in-with-closure/3
+ const models = Object.keys(conversions$4);
+
+ 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
+ };
+ }
+
+ return graph;
+}
+
+// https://en.wikipedia.org/wiki/Breadth-first_search
+function deriveBFS$1(fromModel) {
+ const graph = buildGraph$1();
+ const queue = [fromModel]; // Unshift -> queue -> pop
+
+ graph[fromModel].distance = 0;
+
+ while (queue.length) {
+ const current = queue.pop();
+ const adjacents = Object.keys(conversions$4[current]);
+
+ for (let len = adjacents.length, i = 0; i < len; i++) {
+ const adjacent = adjacents[i];
+ const node = graph[adjacent];
+
+ if (node.distance === -1) {
+ node.distance = graph[current].distance + 1;
+ node.parent = current;
+ queue.unshift(adjacent);
+ }
+ }
+ }
+
+ return graph;
+}
+
+function link$2(from, to) {
+ return function (args) {
+ return to(from(args));
+ };
+}
+
+function wrapConversion$1(toModel, graph) {
+ const path = [graph[toModel].parent, toModel];
+ let fn = conversions$4[graph[toModel].parent][toModel];
+
+ 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;
+ }
+
+ fn.conversion = path;
+ return fn;
+}
+
+var route$3 = function (fromModel) {
+ const graph = deriveBFS$1(fromModel);
+ const conversion = {};
+
+ const models = Object.keys(graph);
+ for (let len = models.length, i = 0; i < len; i++) {
+ const toModel = models[i];
+ const node = graph[toModel];
+
+ if (node.parent === null) {
+ // No possible conversion, or this node is the source model.
+ continue;
+ }
+
+ conversion[toModel] = wrapConversion$1(toModel, graph);
+ }
+
+ return conversion;
+};
+
+const conversions$3 = conversions$5;
+const route$2 = route$3;
+
+const convert$3 = {};
+
+const models$1 = Object.keys(conversions$3);
+
+function wrapRaw$1(fn) {
+ const wrappedFn = function (...args) {
+ const arg0 = args[0];
+ if (arg0 === undefined || arg0 === null) {
+ return arg0;
+ }
+
+ if (arg0.length > 1) {
+ args = arg0;
+ }
+
+ return fn(args);
+ };
+
+ // Preserve .conversion property if there is one
+ if ('conversion' in fn) {
+ wrappedFn.conversion = fn.conversion;
+ }
+
+ return wrappedFn;
+}
+
+function wrapRounded$1(fn) {
+ const wrappedFn = function (...args) {
+ const arg0 = args[0];
+
+ if (arg0 === undefined || arg0 === null) {
+ return arg0;
+ }
+
+ if (arg0.length > 1) {
+ args = arg0;
+ }
+
+ const 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 (let 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;
+ }
+
+ return wrappedFn;
+}
+
+models$1.forEach(fromModel => {
+ convert$3[fromModel] = {};
+
+ Object.defineProperty(convert$3[fromModel], 'channels', {value: conversions$3[fromModel].channels});
+ Object.defineProperty(convert$3[fromModel], 'labels', {value: conversions$3[fromModel].labels});
+
+ const routes = route$2(fromModel);
+ const routeModels = Object.keys(routes);
+
+ routeModels.forEach(toModel => {
+ const fn = routes[toModel];
+
+ convert$3[fromModel][toModel] = wrapRounded$1(fn);
+ convert$3[fromModel][toModel].raw = wrapRaw$1(fn);
+ });
+});
+
+var colorConvert$1 = convert$3;
+
+(function (module) {
+
+const wrapAnsi16 = (fn, offset) => (...args) => {
+ const code = fn(...args);
+ return `\u001B[${code + offset}m`;
+};
+
+const wrapAnsi256 = (fn, offset) => (...args) => {
+ const code = fn(...args);
+ return `\u001B[${38 + offset};5;${code}m`;
+};
+
+const wrapAnsi16m = (fn, offset) => (...args) => {
+ const rgb = fn(...args);
+ return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
+};
+
+const ansi2ansi = n => n;
+const rgb2rgb = (r, g, b) => [r, g, b];
+
+const setLazyProperty = (object, property, get) => {
+ Object.defineProperty(object, property, {
+ get: () => {
+ const value = get();
+
+ Object.defineProperty(object, property, {
+ value,
+ enumerable: true,
+ configurable: true
+ });
+
+ return value;
+ },
+ enumerable: true,
+ configurable: true
+ });
+};
+
+/** @type {typeof import('color-convert')} */
+let colorConvert;
+const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {
+ if (colorConvert === undefined) {
+ colorConvert = colorConvert$1;
+ }
+
+ const offset = isBackground ? 10 : 0;
+ const styles = {};
+
+ 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 styles;
+};
+
+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],
+
+ // 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],
+
+ // 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]
+ }
+ };
+
+ // 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;
+
+ 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`
+ };
+
+ 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
+ });
+
+ styles.color.close = '\u001B[39m';
+ styles.bgColor.close = '\u001B[49m';
+
+ 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;
+}
+
+// Make the export immutable
+Object.defineProperty(module, 'exports', {
+ enumerable: true,
+ get: assembleStyles
+});
+}(ansiStyles$2));
+
+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);
+};
+
+const os$2 = require$$0$2;
+const tty = tty$1;
+const hasFlag$3 = hasFlag$4;
+
+const {env: env$2} = process;
+
+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;
+}
+
+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 translateLevel$2(level) {
+ if (level === 0) {
+ return false;
+ }
+
+ return {
+ level,
+ hasBasic: true,
+ has256: level >= 2,
+ has16m: level >= 3
+ };
+}
+
+function supportsColor$2(haveStream, streamIsTTY) {
+ if (forceColor$1 === 0) {
+ return 0;
+ }
+
+ if (hasFlag$3('color=16m') ||
+ hasFlag$3('color=full') ||
+ hasFlag$3('color=truecolor')) {
+ return 3;
+ }
+
+ if (hasFlag$3('color=256')) {
+ return 2;
+ }
+
+ if (haveStream && !streamIsTTY && forceColor$1 === undefined) {
+ return 0;
+ }
+
+ const min = forceColor$1 || 0;
+
+ if (env$2.TERM === 'dumb') {
+ return min;
+ }
+
+ 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;
+ }
+
+ return 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;
+ }
+
+ return min;
+ }
+
+ if ('TEAMCITY_VERSION' in env$2) {
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$2.TEAMCITY_VERSION) ? 1 : 0;
+ }
+
+ if (env$2.COLORTERM === 'truecolor') {
+ return 3;
+ }
+
+ if ('TERM_PROGRAM' in env$2) {
+ const version = parseInt((env$2.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
+
+ switch (env$2.TERM_PROGRAM) {
+ case 'iTerm.app':
+ return version >= 3 ? 3 : 2;
+ case 'Apple_Terminal':
+ return 2;
+ // No default
+ }
+ }
+
+ if (/-256(color)?$/i.test(env$2.TERM)) {
+ return 2;
+ }
+
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$2.TERM)) {
+ return 1;
+ }
+
+ if ('COLORTERM' in env$2) {
+ return 1;
+ }
+
+ return min;
+}
+
+function getSupportLevel$1(stream) {
+ const level = supportsColor$2(stream, stream && stream.isTTY);
+ return translateLevel$2(level);
+}
+
+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)))
+};
+
+const stringReplaceAll$1 = (string, substring, replacer) => {
+ let index = string.indexOf(substring);
+ if (index === -1) {
+ return string;
+ }
+
+ 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);
+
+ returnValue += string.substr(endIndex);
+ return returnValue;
+};
+
+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);
+
+ returnValue += string.substr(endIndex);
+ return returnValue;
+};
+
+var util$4 = {
+ 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 ESCAPES$1 = new Map([
+ ['n', '\n'],
+ ['r', '\r'],
+ ['t', '\t'],
+ ['b', '\b'],
+ ['f', '\f'],
+ ['v', '\v'],
+ ['0', '\0'],
+ ['\\', '\\'],
+ ['e', '\u001B'],
+ ['a', '\u0007']
+]);
+
+function unescape$1(c) {
+ const u = c[0] === 'u';
+ const bracket = c[1] === '{';
+
+ if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
+ return String.fromCharCode(parseInt(c.slice(1), 16));
+ }
+
+ if (u && bracket) {
+ return String.fromCodePoint(parseInt(c.slice(2, -1), 16));
+ }
+
+ return ESCAPES$1.get(c) || c;
+}
+
+function parseArguments$1(name, arguments_) {
+ const results = [];
+ const chunks = arguments_.trim().split(/\s*,\s*/g);
+ let matches;
+
+ 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}')`);
+ }
+ }
+
+ return results;
+}
+
+function parseStyle$1(style) {
+ STYLE_REGEX$1.lastIndex = 0;
+
+ const results = [];
+ let matches;
+
+ while ((matches = STYLE_REGEX$1.exec(style)) !== null) {
+ const name = matches[1];
+
+ if (matches[2]) {
+ const args = parseArguments$1(name, matches[2]);
+ results.push([name].concat(args));
+ } else {
+ results.push([name]);
+ }
+ }
+
+ return results;
+}
+
+function buildStyle$1(chalk, styles) {
+ const enabled = {};
+
+ 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;
+ }
+
+ if (!(styleName in current)) {
+ throw new Error(`Unknown Chalk style: ${styleName}`);
+ }
+
+ current = styles.length > 0 ? current[styleName](...styles) : current[styleName];
+ }
+
+ return current;
+}
+
+var templates$1 = (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) => {
+ 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');
+ }
+
+ chunks.push(buildStyle$1(chalk, styles)(chunk.join('')));
+ chunk = [];
+ styles.pop();
+ } else {
+ chunk.push(character);
+ }
+ });
+
+ chunks.push(chunk.join(''));
+
+ if (styles.length > 0) {
+ const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`;
+ throw new Error(errMessage);
+ }
+
+ return chunks.join('');
+};
+
+const ansiStyles$1 = ansiStyles$2.exports;
+const {stdout: stdoutColor, stderr: stderrColor} = supportsColor_1$1;
+const {
+ stringReplaceAll,
+ stringEncaseCRLFWithFirstIndex
+} = util$4;
+
+const {isArray: isArray$2} = Array;
+
+// `supportsColor.level` → `ansiStyles.color[name]` mapping
+const levelMapping = [
+ 'ansi',
+ 'ansi',
+ 'ansi256',
+ 'ansi16m'
+];
+
+const styles = Object.create(null);
+
+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');
+ }
+
+ // Detect level if not set manually
+ const colorLevel = stdoutColor ? stdoutColor.level : 0;
+ object.level = options.level === undefined ? colorLevel : options.level;
+};
+
+class ChalkClass {
+ constructor(options) {
+ // eslint-disable-next-line no-constructor-return
+ return chalkFactory(options);
+ }
+}
+
+const chalkFactory = options => {
+ const chalk = {};
+ applyOptions(chalk, options);
+
+ chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);
+
+ Object.setPrototypeOf(chalk, Chalk.prototype);
+ Object.setPrototypeOf(chalk.template, chalk);
+
+ chalk.template.constructor = () => {
+ throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');
+ };
+
+ chalk.template.Instance = ChalkClass;
+
+ return chalk.template;
+};
+
+function Chalk(options) {
+ return chalkFactory(options);
+}
+
+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;
+ }
+ };
+}
+
+styles.visible = {
+ get() {
+ const builder = createBuilder(this, this._styler, true);
+ Object.defineProperty(this, 'visible', {value: builder});
+ return builder;
+ }
+};
+
+const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];
+
+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);
+ };
+ }
+ };
+}
+
+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);
+ };
+ }
+ };
+}
+
+const proto = Object.defineProperties(() => {}, {
+ ...styles,
+ level: {
+ enumerable: true,
+ get() {
+ return this._generator.level;
+ },
+ set(level) {
+ this._generator.level = level;
+ }
+ }
+});
+
+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;
+ }
+
+ 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_));
+ }
+
+ // 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);
+
+ builder._generator = self;
+ builder._styler = _styler;
+ builder._isEmpty = _isEmpty;
+
+ return builder;
+};
+
+const applyStyle = (self, string) => {
+ if (self.level <= 0 || !string) {
+ return self._isEmpty ? '' : string;
+ }
+
+ let styler = self._styler;
+
+ 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);
+
+ 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;
+};
+
+let template;
+const chalkTag = (chalk, ...strings) => {
+ const [firstString] = strings;
+
+ 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(' ');
+ }
+
+ 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])
+ );
+ }
+
+ if (template === undefined) {
+ template = templates$1;
+ }
+
+ return template(chalk, parts.join(''));
+};
+
+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;
+
+var source$1 = chalk$1;
+
+var chokidar = {};
+
+var utils$7 = {};
+
+const path$a = path$b;
+const WIN_SLASH = '\\\\/';
+const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
+
+/**
+ * Posix glob regex
+ */
+
+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
+ */
+
+const WINDOWS_CHARS = {
+ ...POSIX_CHARS,
+
+ 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}]|$)`
+};
+
+/**
+ * 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 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 */
+
+ CHAR_LEFT_PARENTHESES: 40, /* ( */
+ CHAR_RIGHT_PARENTHESES: 41, /* ) */
+
+ CHAR_ASTERISK: 42, /* * */
+
+ // 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 */
+
+ SEP: path$a.sep,
+
+ /**
+ * Create EXTGLOB_CHARS
+ */
+
+ 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: ')' }
+ };
+ },
+
+ /**
+ * Create GLOB_CHARS
+ */
+
+ globChars(win32) {
+ return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
}
+};
- function count(value) {
- if (value) {
- if (value[0] && value[0].messages) {
- // Multiple vfiles
- countInAll(value);
+(function (exports) {
+
+const path = path$b;
+const win32 = process.platform === 'win32';
+const {
+ REGEX_BACKSLASH,
+ REGEX_REMOVE_BACKSLASH,
+ REGEX_SPECIAL_CHARS,
+ REGEX_SPECIAL_CHARS_GLOBAL
+} = constants$5;
+
+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, '/');
+
+exports.removeBackslashes = str => {
+ return str.replace(REGEX_REMOVE_BACKSLASH, match => {
+ return match === '\\' ? '' : match;
+ });
+};
+
+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 === '\\';
+};
+
+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)}`;
+};
+
+exports.removePrefix = (input, state = {}) => {
+ let output = input;
+ if (output.startsWith('./')) {
+ output = output.slice(2);
+ state.prefix = './';
+ }
+ 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}).*$)`;
+ }
+ 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;
+
+const isPathSeparator = code => {
+ return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
+};
+
+const depth = token => {
+ if (token.isPrefix !== true) {
+ token.depth = token.isGlobstar ? Infinity : 1;
+ }
+};
+
+/**
+ * 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
+ */
+
+const scan$1 = (input, options) => {
+ const opts = options || {};
+
+ const length = input.length - 1;
+ const scanToEnd = opts.parts === true || opts.scanToEnd === true;
+ const slashes = [];
+ const tokens = [];
+ const parts = [];
+
+ 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 };
+
+ const eos = () => index >= length;
+ const peek = () => str.charCodeAt(index + 1);
+ const advance = () => {
+ prev = code;
+ return str.charCodeAt(++index);
+ };
+
+ while (index < length) {
+ code = advance();
+ let next;
+
+ if (code === CHAR_BACKWARD_SLASH) {
+ backslashes = token.backslashes = true;
+ code = advance();
+
+ if (code === CHAR_LEFT_CURLY_BRACE$1) {
+ braceEscaped = true;
+ }
+ continue;
+ }
+
+ 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;
+ }
+
+ if (code === CHAR_LEFT_CURLY_BRACE$1) {
+ braces++;
+ continue;
+ }
+
+ if (braceEscaped !== true && code === CHAR_DOT$1 && (code = advance()) === CHAR_DOT$1) {
+ isBrace = token.isBrace = true;
+ isGlob = token.isGlob = true;
+ finished = true;
+
+ if (scanToEnd === true) {
+ continue;
+ }
+
+ break;
+ }
+
+ if (braceEscaped !== true && code === CHAR_COMMA$2) {
+ isBrace = token.isBrace = true;
+ isGlob = token.isGlob = true;
+ finished = true;
+
+ if (scanToEnd === true) {
+ continue;
+ }
+
+ break;
+ }
+
+ if (code === CHAR_RIGHT_CURLY_BRACE$1) {
+ braces--;
+
+ if (braces === 0) {
+ braceEscaped = false;
+ isBrace = token.isBrace = true;
+ finished = true;
+ break;
+ }
+ }
+ }
+
+ if (scanToEnd === true) {
+ continue;
+ }
+
+ break;
+ }
+
+ if (code === CHAR_FORWARD_SLASH) {
+ slashes.push(index);
+ tokens.push(token);
+ token = { value: '', depth: 0, isGlob: false };
+
+ if (finished === true) continue;
+ if (prev === CHAR_DOT$1 && index === (start + 1)) {
+ start += 2;
+ continue;
+ }
+
+ lastIndex = index + 1;
+ continue;
+ }
+
+ if (opts.noext !== true) {
+ const isExtglobChar = code === CHAR_PLUS
+ || code === CHAR_AT
+ || code === CHAR_ASTERISK$1
+ || code === CHAR_QUESTION_MARK
+ || code === CHAR_EXCLAMATION_MARK;
+
+ if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES$1) {
+ isGlob = token.isGlob = true;
+ isExtglob = token.isExtglob = true;
+ finished = true;
+
+ if (scanToEnd === true) {
+ while (eos() !== true && (code = advance())) {
+ if (code === CHAR_BACKWARD_SLASH) {
+ backslashes = token.backslashes = true;
+ code = advance();
+ continue;
+ }
+
+ 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;
+
+ if (scanToEnd === true) {
+ continue;
+ }
+ break;
+ }
+
+ if (code === CHAR_QUESTION_MARK) {
+ isGlob = token.isGlob = true;
+ finished = true;
+
+ if (scanToEnd === true) {
+ continue;
+ }
+ break;
+ }
+
+ if (code === CHAR_LEFT_SQUARE_BRACKET$2) {
+ while (eos() !== true && (next = advance())) {
+ if (next === CHAR_BACKWARD_SLASH) {
+ backslashes = token.backslashes = true;
+ advance();
+ continue;
+ }
+
+ if (next === CHAR_RIGHT_SQUARE_BRACKET$2) {
+ isBracket = token.isBracket = true;
+ isGlob = token.isGlob = true;
+ finished = true;
+
+ if (scanToEnd === true) {
+ continue;
+ }
+ break;
+ }
+ }
+ }
+
+ if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
+ negated = token.negated = true;
+ start++;
+ continue;
+ }
+
+ 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$1) {
+ backslashes = token.backslashes = true;
+ code = advance();
+ continue;
+ }
+
+ if (code === CHAR_RIGHT_PARENTHESES$1) {
+ finished = true;
+ break;
+ }
+ }
+ continue;
+ }
+ break;
+ }
+
+ if (isGlob === true) {
+ finished = true;
+
+ if (scanToEnd === true) {
+ continue;
+ }
+
+ break;
+ }
+ }
+
+ if (opts.noext === true) {
+ isExtglob = false;
+ isGlob = false;
+ }
+
+ let base = str;
+ let prefix = '';
+ let glob = '';
+
+ if (start > 0) {
+ prefix = str.slice(0, start);
+ str = str.slice(start);
+ lastIndex -= start;
+ }
+
+ 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 (base && base !== '' && base !== '/' && base !== str) {
+ if (isPathSeparator(base.charCodeAt(base.length - 1))) {
+ base = base.slice(0, -1);
+ }
+ }
+
+ if (opts.unescape === true) {
+ if (glob) glob = utils$6.removeBackslashes(glob);
+
+ if (base && backslashes === true) {
+ base = utils$6.removeBackslashes(base);
+ }
+ }
+
+ const state = {
+ prefix,
+ input,
+ start,
+ base,
+ glob,
+ isBrace,
+ isBracket,
+ isGlob,
+ isExtglob,
+ isGlobstar,
+ negated
+ };
+
+ if (opts.tokens === true) {
+ state.maxDepth = 0;
+ if (!isPathSeparator(code)) {
+ tokens.push(token);
+ }
+ 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;
+ }
+
+ if (prevIndex && prevIndex + 1 < input.length) {
+ const value = input.slice(prevIndex + 1);
+ parts.push(value);
+
+ 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;
+ }
+
+ return state;
+};
+
+var scan_1 = scan$1;
+
+const constants$4 = constants$5;
+const utils$5 = utils$7;
+
+/**
+ * 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);
+ }
+
+ 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('..');
+ }
+
+ return value;
+};
+
+/**
+ * Create the message for a syntax error
+ */
+
+const syntaxError$1 = (type, char) => {
+ return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
+};
+
+/**
+ * Parse the given input string.
+ * @param {String} input
+ * @param {Object} options
+ * @return {Object}
+ */
+
+const parse$e = (input, options) => {
+ if (typeof input !== 'string') {
+ throw new TypeError('Expected a string');
+ }
+
+ 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}`);
+ }
+
+ 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 globstar = (opts) => {
+ return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
+ };
+
+ 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})`;
+ }
+
+ // minimatch options support
+ if (typeof opts.noext === 'boolean') {
+ opts.noextglob = opts.noext;
+ }
+
+ 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;
+
+ while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
+ advance();
+ state.start++;
+ count++;
+ }
+
+ if (count % 2 === 0) {
+ return false;
+ }
+
+ 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;
+ }
+ }
+
+ if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
+ extglobs[extglobs.length - 1].inner += tok.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;
+ }
+
+ tok.prev = prev;
+ tokens.push(tok);
+ prev = tok;
+ };
+
+ const extglobOpen = (type, value) => {
+ const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
+
+ 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 ? ')' : '');
+
+ 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}`;
+ }
+
+ if (token.prev.type === 'bos' && eos()) {
+ state.negatedExtglob = true;
+ }
+ }
+
+ push({ type: 'paren', extglob: true, value, output });
+ decrement('parens');
+ };
+
+ /**
+ * Fast paths
+ */
+
+ if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
+ let backslashes = false;
+
+ let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
+ if (first === '\\') {
+ backslashes = true;
+ return m;
+ }
+
+ 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 {
- // One vfile / messages
- countAll(value.messages || value);
+ output = output.replace(/\\+/g, m => {
+ return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
+ });
}
}
+
+ if (output === input && opts.contains === true) {
+ state.output = input;
+ return state;
+ }
+
+ state.output = utils$5.wrapOutput(output, state, options);
+ return state;
}
- function countInAll(files) {
- var length = files.length;
- var index = -1;
+ /**
+ * Tokenize input until we reach end-of-string
+ */
+
+ while (!eos()) {
+ value = advance();
+
+ if (value === '\u0000') {
+ continue;
+ }
+
+ /**
+ * Escaped characters
+ */
+
+ if (value === '\\') {
+ const next = peek();
+
+ if (next === '/' && opts.bash !== true) {
+ continue;
+ }
+
+ if (next === '.' || next === ';') {
+ continue;
+ }
+
+ if (!next) {
+ value += '\\';
+ push({ type: 'text', value });
+ continue;
+ }
+
+ // collapse slashes to reduce potential for exploits
+ const match = /^\\+/.exec(remaining());
+ let slashes = 0;
+
+ if (match && match[0].length > 2) {
+ slashes = match[0].length;
+ state.index += slashes;
+ if (slashes % 2 !== 0) {
+ value += '\\';
+ }
+ }
+
+ if (opts.unescape === true) {
+ value = advance() || '';
+ } else {
+ value += advance() || '';
+ }
+
+ if (state.brackets === 0) {
+ push({ type: 'text', value });
+ continue;
+ }
+ }
+
+ /**
+ * If we're inside a regex character class, continue
+ * until we reach the closing bracket.
+ */
+
+ 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;
+
+ 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();
+
+ if (!bos.output && tokens.indexOf(prev) === 1) {
+ bos.output = ONE_CHAR;
+ }
+ continue;
+ }
+ }
+ }
+ }
+
+ if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
+ value = `\\${value}`;
+ }
+
+ if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
+ value = `\\${value}`;
+ }
- while (++index < length) {
- count(files[index].messages);
+ if (opts.posix === true && value === '!' && prev.value === '[') {
+ value = '^';
+ }
+
+ prev.value += value;
+ append({ value });
+ continue;
+ }
+
+ /**
+ * If we're inside a quoted string, continue
+ * until we reach the closing double quote.
+ */
+
+ if (state.quotes === 1 && value !== '"') {
+ value = utils$5.escapeRegex(value);
+ prev.value += value;
+ append({ value });
+ continue;
+ }
+
+ /**
+ * Double quotes
+ */
+
+ if (value === '"') {
+ state.quotes = state.quotes === 1 ? 0 : 1;
+ if (opts.keepQuotes === true) {
+ push({ type: 'text', value });
+ }
+ continue;
+ }
+
+ /**
+ * Parentheses
+ */
+
+ if (value === '(') {
+ increment('parens');
+ push({ type: 'paren', value });
+ continue;
+ }
+
+ if (value === ')') {
+ if (state.parens === 0 && opts.strictBrackets === true) {
+ throw new SyntaxError(syntaxError$1('opening', '('));
+ }
+
+ const extglob = extglobs[extglobs.length - 1];
+ if (extglob && state.parens === extglob.parens + 1) {
+ extglobClose(extglobs.pop());
+ continue;
+ }
+
+ push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
+ decrement('parens');
+ continue;
+ }
+
+ /**
+ * Square brackets
+ */
+
+ if (value === '[') {
+ if (opts.nobracket === true || !remaining().includes(']')) {
+ if (opts.nobracket !== true && opts.strictBrackets === true) {
+ throw new SyntaxError(syntaxError$1('closing', ']'));
+ }
+
+ value = `\\${value}`;
+ } else {
+ increment('brackets');
+ }
+
+ push({ type: 'bracket', value });
+ continue;
}
+
+ if (value === ']') {
+ if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
+ push({ type: 'text', value, output: `\\${value}` });
+ continue;
+ }
+
+ if (state.brackets === 0) {
+ if (opts.strictBrackets === true) {
+ throw new SyntaxError(syntaxError$1('opening', '['));
+ }
+
+ push({ type: 'text', value, output: `\\${value}` });
+ continue;
+ }
+
+ decrement('brackets');
+
+ const prevValue = prev.value.slice(1);
+ if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
+ value = `/${value}`;
+ }
+
+ prev.value += value;
+ append({ value });
+
+ // when literal brackets are explicitly disabled
+ // assume we should match with a regex character class
+ if (opts.literalBrackets === false || utils$5.hasRegexChars(prevValue)) {
+ continue;
+ }
+
+ const escaped = utils$5.escapeRegex(prev.value);
+ state.output = state.output.slice(0, -prev.value.length);
+
+ // 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;
+ }
+
+ // when the user specifies nothing, try to match both
+ prev.value = `(${capture}${escaped}|${prev.value})`;
+ state.output += prev.value;
+ continue;
+ }
+
+ /**
+ * Braces
+ */
+
+ if (value === '{' && opts.nobrace !== true) {
+ increment('braces');
+
+ const open = {
+ type: 'brace',
+ value,
+ output: '(',
+ outputIndex: state.output.length,
+ tokensIndex: state.tokens.length
+ };
+
+ braces.push(open);
+ push(open);
+ continue;
+ }
+
+ if (value === '}') {
+ const brace = braces[braces.length - 1];
+
+ if (opts.nobrace === true || !brace) {
+ push({ type: 'text', value, output: value });
+ continue;
+ }
+
+ let output = ')';
+
+ if (brace.dots === true) {
+ const arr = tokens.slice();
+ const range = [];
+
+ 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);
+ }
+ }
+
+ 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);
+ }
+ }
+
+ push({ type: 'brace', value, output });
+ decrement('braces');
+ braces.pop();
+ continue;
+ }
+
+ /**
+ * Pipes
+ */
+
+ if (value === '|') {
+ if (extglobs.length > 0) {
+ extglobs[extglobs.length - 1].conditions++;
+ }
+ push({ type: 'text', value });
+ continue;
+ }
+
+ /**
+ * Commas
+ */
+
+ if (value === ',') {
+ let output = value;
+
+ const brace = braces[braces.length - 1];
+ if (brace && stack[stack.length - 1] === 'braces') {
+ brace.comma = true;
+ output = '|';
+ }
+
+ push({ type: 'comma', value, output });
+ continue;
+ }
+
+ /**
+ * Slashes
+ */
+
+ 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;
+ }
+
+ push({ type: 'slash', value, output: SLASH_LITERAL });
+ continue;
+ }
+
+ /**
+ * Dots
+ */
+
+ 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.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
+ push({ type: 'text', value, output: DOT_LITERAL });
+ continue;
+ }
+
+ push({ type: 'dot', value, output: DOT_LITERAL });
+ continue;
+ }
+
+ /**
+ * Question marks
+ */
+
+ if (value === '?') {
+ const isGroup = prev && prev.value === '(';
+ if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
+ extglobOpen('qmark', value);
+ continue;
+ }
+
+ if (prev && prev.type === 'paren') {
+ const next = peek();
+ let output = value;
+
+ if (next === '<' && !utils$5.supportsLookbehinds()) {
+ throw new Error('Node.js v10 or higher is required for regex lookbehinds');
+ }
+
+ if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
+ output = `\\${value}`;
+ }
+
+ push({ type: 'text', value, output });
+ continue;
+ }
+
+ if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
+ push({ type: 'qmark', value, output: QMARK_NO_DOT });
+ continue;
+ }
+
+ push({ type: 'qmark', value, output: QMARK });
+ continue;
+ }
+
+ /**
+ * Exclamation
+ */
+
+ if (value === '!') {
+ if (opts.noextglob !== true && peek() === '(') {
+ if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
+ extglobOpen('negate', value);
+ continue;
+ }
+ }
+
+ if (opts.nonegate !== true && state.index === 0) {
+ negate();
+ continue;
+ }
+ }
+
+ /**
+ * Plus
+ */
+
+ if (value === '+') {
+ if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
+ extglobOpen('plus', value);
+ continue;
+ }
+
+ if ((prev && prev.value === '(') || opts.regex === false) {
+ push({ type: 'plus', value, output: PLUS_LITERAL });
+ continue;
+ }
+
+ if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
+ push({ type: 'plus', value });
+ continue;
+ }
+
+ push({ type: 'plus', value: PLUS_LITERAL });
+ continue;
+ }
+
+ /**
+ * Plain text
+ */
+
+ if (value === '@') {
+ if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
+ push({ type: 'at', extglob: true, value, output: '' });
+ continue;
+ }
+
+ push({ type: 'text', value });
+ continue;
+ }
+
+ /**
+ * Plain text
+ */
+
+ if (value !== '*') {
+ if (value === '$' || value === '^') {
+ value = `\\${value}`;
+ }
+
+ const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
+ if (match) {
+ value += match[0];
+ state.index += match[0].length;
+ }
+
+ push({ type: 'text', value });
+ continue;
+ }
+
+ /**
+ * Stars
+ */
+
+ 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;
+ }
+
+ let rest = remaining();
+ if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
+ extglobOpen('star', value);
+ continue;
+ }
+
+ if (prev.type === 'star') {
+ if (opts.noglobstar === true) {
+ consume(value);
+ continue;
+ }
+
+ 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 (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
+ push({ type: 'star', value, output: '' });
+ continue;
+ }
+
+ 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;
+ }
+
+ // strip consecutive `/**/`
+ while (rest.slice(0, 3) === '/**') {
+ const after = input[state.index + 4];
+ if (after && after !== '/') {
+ break;
+ }
+ rest = rest.slice(3);
+ consume('/**', 3);
+ }
+
+ 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;
+ }
+
+ 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}`;
+
+ 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 (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
+ const end = rest[1] !== void 0 ? '|$' : '';
+
+ state.output = state.output.slice(0, -(prior.output + prev.output).length);
+ prior.output = `(?:${prior.output}`;
+
+ prev.type = 'globstar';
+ prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
+ prev.value += value;
+
+ state.output += prior.output + prev.output;
+ state.globstar = true;
+
+ consume(value + advance());
+
+ push({ type: 'slash', value: '/', output: '' });
+ continue;
+ }
+
+ 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;
+ }
+
+ // remove single star from output
+ state.output = state.output.slice(0, -prev.output.length);
+
+ // reset previous token to globstar
+ prev.type = 'globstar';
+ prev.output = globstar(opts);
+ prev.value += value;
+
+ // reset output with globstar
+ state.output += prev.output;
+ state.globstar = true;
+ consume(value);
+ continue;
+ }
+
+ const token = { type: 'star', value, output: star };
+
+ if (opts.bash === true) {
+ token.output = '.*?';
+ if (prev.type === 'bos' || prev.type === 'slash') {
+ token.output = nodot + token.output;
+ }
+ push(token);
+ continue;
+ }
+
+ if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
+ token.output = value;
+ push(token);
+ continue;
+ }
+
+ 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;
+
+ } else if (opts.dot === true) {
+ state.output += NO_DOTS_SLASH;
+ prev.output += NO_DOTS_SLASH;
+
+ } else {
+ state.output += nodot;
+ prev.output += nodot;
+ }
+
+ if (peek() !== '*') {
+ state.output += ONE_CHAR;
+ prev.output += ONE_CHAR;
+ }
+ }
+
+ push(token);
}
- function countAll(messages) {
- var length = messages.length;
- var index = -1;
- var fatal;
+ while (state.brackets > 0) {
+ 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$1('closing', ')'));
+ state.output = utils$5.escapeLast(state.output, '(');
+ decrement('parens');
+ }
+
+ while (state.braces > 0) {
+ if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', '}'));
+ state.output = utils$5.escapeLast(state.output, '{');
+ decrement('braces');
+ }
+
+ if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
+ push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
+ }
+
+ // 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;
- while (++index < length) {
- fatal = messages[index].fatal;
- result[fatal === null || fatal === undefined ? null : Boolean(fatal)]++;
+ if (token.suffix) {
+ state.output += token.suffix;
+ }
}
}
-}
-var slice$4 = [].slice;
+ return state;
+};
-var wrap_1 = wrap$3;
+/**
+ * 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.
+ */
-// 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;
+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}`);
+ }
- return wrapped
+ input = REPLACEMENTS[input] || input;
+ const win32 = utils$5.isWindows(options);
+
+ // 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;
+
+ if (opts.capture) {
+ star = `(${star})`;
+ }
+
+ const globstar = (opts) => {
+ if (opts.noglobstar === true) return star;
+ return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
+ };
+
+ const create = str => {
+ switch (str) {
+ case '*':
+ return `${nodot}${ONE_CHAR}${star}`;
+
+ case '.*':
+ return `${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+ case '*.*':
+ return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+ case '*/*':
+ return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
+
+ case '**':
+ return nodot + globstar(opts);
+
+ case '**/*':
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
+
+ case '**/*.*':
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+ case '**/.*':
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
- function wrapped() {
- var params = slice$4.call(arguments, 0);
- var callback = fn.length > params.length;
- var result;
+ default: {
+ const match = /^(.*?)\.(\w+)$/.exec(str);
+ if (!match) return;
- if (callback) {
- params.push(done);
+ const source = create(match[1]);
+ if (!source) return;
+
+ return source + DOT_LITERAL + match[2];
+ }
}
+ };
+
+ const output = utils$5.removePrefix(input, state);
+ let source = create(output);
+
+ if (source && opts.strictSlashes !== true) {
+ source += `${SLASH_LITERAL}?`;
+ }
+
+ return source;
+};
+
+var parse_1$2 = parse$e;
+
+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);
+
+/**
+ * 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;
+ }
+
+ 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$4.isWindows(options);
+ const regex = isState
+ ? picomatch$3.compileRe(glob, options)
+ : picomatch$3.makeRe(glob, options, false, true);
+
+ const state = regex.state;
+ delete regex.state;
+
+ let isIgnored = () => false;
+ if (opts.ignore) {
+ const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
+ isIgnored = picomatch$3(opts.ignore, ignoreOpts, returnState);
+ }
+
+ 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 };
+
+ if (typeof opts.onResult === 'function') {
+ opts.onResult(result);
+ }
+
+ if (isMatch === false) {
+ result.isMatch = false;
+ return returnObject ? result : false;
+ }
+
+ if (isIgnored(input)) {
+ if (typeof opts.onIgnore === 'function') {
+ opts.onIgnore(result);
+ }
+ result.isMatch = false;
+ return returnObject ? result : false;
+ }
+
+ if (typeof opts.onMatch === 'function') {
+ opts.onMatch(result);
+ }
+ return returnObject ? result : true;
+ };
+
+ if (returnState) {
+ matcher.state = state;
+ }
+
+ return matcher;
+};
+
+/**
+ * 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
+ */
+
+picomatch$3.test = (input, regex, options, { glob, posix } = {}) => {
+ if (typeof input !== 'string') {
+ throw new TypeError('Expected input to be a string');
+ }
+
+ if (input === '') {
+ return { isMatch: false, output: '' };
+ }
+
+ const opts = options || {};
+ const format = opts.format || (posix ? utils$4.toPosixSlashes : null);
+ let match = input === glob;
+ let output = (match && format) ? format(input) : input;
+
+ if (match === false) {
+ output = format ? format(input) : input;
+ match = output === glob;
+ }
+
+ 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);
+ }
+ }
+
+ 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
+ */
+
+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));
+};
+
+/**
+ * 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
+ */
+
+picomatch$3.isMatch = (str, patterns, options) => picomatch$3(patterns, options)(str);
+
+/**
+ * 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
+ */
+
+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 });
+};
+
+/**
+ * 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
+ */
+
+picomatch$3.scan = (input, options) => scan(input, options);
+
+/**
+ * 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
+ */
+
+picomatch$3.compileRe = (parsed, options, returnOutput = false, returnState = false) => {
+ if (returnOutput === true) {
+ return parsed.output;
+ }
+
+ const opts = options || {};
+ const prepend = opts.contains ? '' : '^';
+ const append = opts.contains ? '' : '$';
+
+ let source = `${prepend}(?:${parsed.output})${append}`;
+ if (parsed && parsed.negated === true) {
+ source = `^(?!${source}).*$`;
+ }
+
+ const regex = picomatch$3.toRegex(source, options);
+ if (returnState === true) {
+ regex.state = parsed;
+ }
+
+ return regex;
+};
+
+picomatch$3.makeRe = (input, options, returnOutput = false, returnState = false) => {
+ if (!input || typeof input !== 'string') {
+ throw new TypeError('Expected a non-empty string');
+ }
+
+ const opts = options || {};
+ let parsed = { negated: false, fastpaths: true };
+ let prefix = '';
+ let output;
+
+ if (input.startsWith('./')) {
+ input = input.slice(2);
+ prefix = parsed.prefix = './';
+ }
+
+ if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
+ output = parse$d.fastpaths(input, options);
+ }
+
+ if (output === undefined) {
+ parsed = parse$d(input, options);
+ parsed.prefix = prefix + (parsed.prefix || '');
+ } else {
+ parsed.output = output;
+ }
+
+ return picomatch$3.compileRe(parsed, options, returnOutput, returnState);
+};
+
+/**
+ * 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
+ */
+
+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 /$^/;
+ }
+};
+
+/**
+ * Picomatch constants.
+ * @return {Object}
+ */
+
+picomatch$3.constants = constants$3;
+
+/**
+ * Expose "picomatch"
+ */
+
+var picomatch_1 = picomatch$3;
+
+var picomatch$2 = picomatch_1;
+
+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;
+
+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);
+
+/**
+ * @typedef {Object} EntryInfo
+ * @property {String} path
+ * @property {String} fullPath
+ * @property {fs.Stats=} stats
+ * @property {fs.Dirent=} dirent
+ * @property {String} basename
+ */
+
+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];
+
+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;
+ if (typeof filter === 'function') return filter;
+
+ if (typeof filter === 'string') {
+ const glob = picomatch$1(filter.trim());
+ return entry => glob(entry.basename);
+ }
+
+ 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));
+ }
+ }
+
+ 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));
+ }
+};
+
+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
+ };
+ }
+
+ constructor(options = {}) {
+ super({
+ objectMode: true,
+ autoDestroy: true,
+ highWaterMark: options.highWaterMark || 4096
+ });
+ const opts = { ...ReaddirpStream.defaultOptions, ...options };
+ const { root, type } = opts;
+
+ this._fileFilter = normalizeFilter(opts.fileFilter);
+ this._directoryFilter = normalizeFilter(opts.directoryFilter);
+
+ 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;
+ }
+
+ 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 };
+
+ // Launch stream with one parent, the root dir.
+ this.parents = [this._exploreDir(root, 1)];
+ this.reading = false;
+ this.parent = undefined;
+ }
+
+ async _read(batch) {
+ if (this.reading) return;
+ this.reading = true;
try {
- result = fn.apply(null, params);
+ while (!this.destroyed && batch > 0) {
+ const { path, depth, files = [] } = this.parent || {};
+
+ 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;
+
+ 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 (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) {
- // 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
+ this.destroy(error);
+ } finally {
+ this.reading = false;
+ }
+ }
+
+ async _exploreDir(path, depth) {
+ let files;
+ try {
+ files = await readdir$1(path, this._rdOptions);
+ } catch (error) {
+ this._onError(error);
+ }
+ return { files, depth, path };
+ }
+
+ 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;
+ }
+
+ _onError(err) {
+ if (isNormalFlowError(err) && !this.destroyed) {
+ this.emit('warn', err);
+ } else {
+ this.destroy(err);
+ }
+ }
+
+ 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$2(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);
}
+ }
+ }
+
+ _includeAsFile(entry) {
+ const stats = entry && entry[this._statsProp];
+
+ return stats && this._wantsEverything && !stats.isDirectory();
+ }
+}
+
+/**
+ * @typedef {Object} ReaddirpArguments
+ * @property {Function=} fileFilter
+ * @property {Function=} directoryFilter
+ * @property {String=} type
+ * @property {Number=} depth
+ * @property {String=} root
+ * @property {Boolean=} lstat
+ * @property {Boolean=} bigint
+ */
+
+/**
+ * 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(', ')}`);
+ }
- return done(error)
+ options.root = root;
+ return new ReaddirpStream(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));
+ });
+};
+
+readdirp$1.promise = readdirpPromise;
+readdirp$1.ReaddirpStream = ReaddirpStream;
+readdirp$1.default = readdirp$1;
+
+var readdirp_1 = readdirp$1;
+
+var anymatch$2 = {exports: {}};
+
+/*!
+ * normalize-path <https://github.com/jonschlinkert/normalize-path>
+ *
+ * Copyright (c) 2014-2018, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+var normalizePath$2 = function(path, stripTrailing) {
+ if (typeof path !== 'string') {
+ throw new TypeError('expected path to be a string');
+ }
+
+ if (path === '\\' || path === '/') return '/';
+
+ var len = path.length;
+ if (len <= 1) return path;
+
+ // 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 = '//';
}
+ }
- if (!callback) {
- if (result && typeof result.then === 'function') {
- result.then(then, done);
- } else if (result instanceof Error) {
- done(result);
+ var segs = path.split(/[/\\]+/);
+ if (stripTrailing !== false && segs[segs.length - 1] === '') {
+ segs.pop();
+ }
+ 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
+ * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher
+ */
+const BANG$1 = '!';
+const DEFAULT_OPTIONS = {returnIndex: false};
+const arrify$1 = (item) => Array.isArray(item) ? item : [item];
+
+/**
+ * @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<Function>} patterns
+ * @param {Array<Function>} 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);
+
+ for (let index = 0; index < negPatterns.length; index++) {
+ const nglob = negPatterns[index];
+ if (nglob(path)) {
+ return returnIndex ? -1 : 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 returnIndex ? -1 : false;
+};
+
+/**
+ * @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;
+
+ // 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));
+
+ if (testString == null) {
+ return (testString, ri = false) => {
+ const returnIndex = typeof ri === 'boolean' ? ri : false;
+ return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
+ }
+ }
+
+ return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
+};
+
+anymatch$1.default = anymatch$1;
+anymatch$2.exports = anymatch$1;
+
+/*!
+ * is-extglob <https://github.com/jonschlinkert/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;
+ }
+
+ var match;
+ while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
+ if (match[2]) return true;
+ str = str.slice(match.index + match[0].length);
+ }
+
+ return false;
+};
+
+/*!
+ * is-glob <https://github.com/jonschlinkert/is-glob>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+var isExtglob = isExtglob$1;
+var chars$1 = { '{': '}', '(': ')', '[': ']'};
+var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
+var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
+
+var isGlob$2 = function isGlob(str, options) {
+ if (typeof str !== 'string' || str === '') {
+ return false;
+ }
+
+ if (isExtglob(str)) {
+ return true;
+ }
+
+ var regex = strictRegex;
+ var match;
+
+ // optionally relax regex
+ if (options && options.strict === false) {
+ regex = relaxedRegex;
+ }
+
+ while ((match = regex.exec(str))) {
+ if (match[2]) return true;
+ var idx = match.index + match[0].length;
+
+ // 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;
+ }
+ }
+
+ str = str.slice(idx);
+ }
+ return false;
+};
+
+var isGlob$1 = isGlob$2;
+var pathPosixDirname = path$b.posix.dirname;
+var isWin32 = require$$0$2.platform() === 'win32';
+
+var slash = '/';
+var backslash = /\\/g;
+var enclosure = /[\{\[].*[\}\]]$/;
+var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/;
+var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
+
+/**
+ * @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);
+
+ // flip windows path separators
+ if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {
+ str = str.replace(backslash, slash);
+ }
+
+ // special case for strings ending in enclosure containing path separator
+ if (enclosure.test(str)) {
+ str += slash;
+ }
+
+ // 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');
+};
+
+var utils$3 = {};
+
+(function (exports) {
+
+exports.isInteger = num => {
+ if (typeof num === 'number') {
+ return Number.isInteger(num);
+ }
+ if (typeof num === 'string' && num.trim() !== '') {
+ return Number.isInteger(Number(num));
+ }
+ return false;
+};
+
+/**
+ * Find a node of the given type
+ */
+
+exports.find = (node, type) => node.nodes.find(node => node.type === type);
+
+/**
+ * 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;
+};
+
+/**
+ * Escape the given node with '\\' before node.value
+ */
+
+exports.escapeNode = (block, n = 0, type) => {
+ let node = block.nodes[n];
+ if (!node) return;
+
+ if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
+ if (node.escaped !== true) {
+ node.value = '\\' + node.value;
+ node.escaped = true;
+ }
+ }
+};
+
+/**
+ * Returns true if the given brace node should be enclosed in literal braces
+ */
+
+exports.encloseBrace = node => {
+ if (node.type !== 'brace') return false;
+ if ((node.commas >> 0 + node.ranges >> 0) === 0) {
+ node.invalid = true;
+ return true;
+ }
+ return false;
+};
+
+/**
+ * Returns true if a brace node is invalid.
+ */
+
+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;
+};
+
+/**
+ * Returns true if a node is an open or close node
+ */
+
+exports.isOpenOrClose = node => {
+ if (node.type === 'open' || node.type === 'close') {
+ return true;
+ }
+ return node.open === true || node.close === true;
+};
+
+/**
+ * Reduce an array of text nodes.
+ */
+
+exports.reduce = nodes => nodes.reduce((acc, node) => {
+ if (node.type === 'text') acc.push(node.value);
+ if (node.type === 'range') node.type = 'text';
+ return acc;
+}, []);
+
+/**
+ * Flatten an array
+ */
+
+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));
+
+const utils$2 = utils$3;
+
+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 = '';
+
+ if (node.value) {
+ if ((invalidBlock || invalidNode) && utils$2.isOpenOrClose(node)) {
+ return '\\' + node.value;
+ }
+ return node.value;
+ }
+
+ if (node.value) {
+ return node.value;
+ }
+
+ if (node.nodes) {
+ for (let child of node.nodes) {
+ output += stringify(child);
+ }
+ }
+ return output;
+ };
+
+ return stringify(ast);
+};
+
+/*!
+ * is-number <https://github.com/jonschlinkert/is-number>
+ *
+ * Copyright (c) 2014-present, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+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;
+};
+
+/*!
+ * to-regex-range <https://github.com/micromatch/to-regex-range>
+ *
+ * Copyright (c) 2015-present, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+const isNumber$2 = isNumber$3;
+
+const toRegexRange$1 = (min, max, options) => {
+ if (isNumber$2(min) === false) {
+ throw new TypeError('toRegexRange: expected the first argument to be a number');
+ }
+
+ if (max === void 0 || min === max) {
+ return String(min);
+ }
+
+ if (isNumber$2(max) === false) {
+ throw new TypeError('toRegexRange: expected the second argument to be a number.');
+ }
+
+ let opts = { relaxZeros: true, ...options };
+ if (typeof opts.strictZeros === 'boolean') {
+ opts.relaxZeros = opts.strictZeros === false;
+ }
+
+ 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;
+
+ if (toRegexRange$1.cache.hasOwnProperty(cacheKey)) {
+ return toRegexRange$1.cache[cacheKey].result;
+ }
+
+ let a = Math.min(min, max);
+ let b = Math.max(min, max);
+
+ if (Math.abs(a - b) === 1) {
+ let result = min + '|' + max;
+ if (opts.capture) {
+ return `(${result})`;
+ }
+ if (opts.wrap === false) {
+ return result;
+ }
+ return `(?:${result})`;
+ }
+
+ let isPadded = hasPadding(min) || hasPadding(max);
+ let state = { min, max, a, b };
+ let positives = [];
+ let negatives = [];
+
+ if (isPadded) {
+ state.isPadded = isPadded;
+ state.maxLen = String(state.max).length;
+ }
+
+ 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);
+ }
+
+ state.negatives = negatives;
+ state.positives = positives;
+ state.result = collatePatterns(negatives, positives);
+
+ if (opts.capture === true) {
+ state.result = `(${state.result})`;
+ } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
+ state.result = `(?:${state.result})`;
+ }
+
+ toRegexRange$1.cache[cacheKey] = state;
+ return state.result;
+};
+
+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('|');
+}
+
+function splitToRanges(min, max) {
+ let nines = 1;
+ let zeros = 1;
+
+ let stop = countNines(min, nines);
+ let stops = new Set([max]);
+
+ while (min <= stop && stop <= max) {
+ stops.add(stop);
+ nines += 1;
+ stop = countNines(min, nines);
+ }
+
+ stop = countZeros(max + 1, zeros) - 1;
+
+ while (min < stop && stop <= max) {
+ stops.add(stop);
+ zeros += 1;
+ stop = countZeros(max + 1, zeros) - 1;
+ }
+
+ stops = [...stops];
+ stops.sort(compare$c);
+ return stops;
+}
+
+/**
+ * Convert a range to a regex pattern
+ * @param {Number} `start`
+ * @param {Number} `stop`
+ * @return {String}
+ */
+
+function rangeToPattern(start, stop, options) {
+ if (start === stop) {
+ return { pattern: start, count: [], digits: 0 };
+ }
+
+ let zipped = zip(start, stop);
+ let digits = zipped.length;
+ let pattern = '';
+ let count = 0;
+
+ for (let i = 0; i < digits; i++) {
+ let [startDigit, stopDigit] = zipped[i];
+
+ if (startDigit === stopDigit) {
+ pattern += startDigit;
+
+ } else if (startDigit !== '0' || stopDigit !== '9') {
+ pattern += toCharacterClass(startDigit, stopDigit);
+
+ } else {
+ count++;
+ }
+ }
+
+ if (count) {
+ pattern += options.shorthand === true ? '\\d' : '[0-9]';
+ }
+
+ return { pattern, count: [count], digits };
+}
+
+function splitToPatterns(min, max, tok, options) {
+ let ranges = splitToRanges(min, max);
+ let tokens = [];
+ let start = min;
+ let prev;
+
+ for (let i = 0; i < ranges.length; i++) {
+ let max = ranges[i];
+ let obj = rangeToPattern(String(start), String(max), options);
+ let zeros = '';
+
+ if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
+ if (prev.count.length > 1) {
+ prev.count.pop();
+ }
+
+ prev.count.push(obj.count[0]);
+ prev.string = prev.pattern + toQuantifier(prev.count);
+ start = max + 1;
+ continue;
+ }
+
+ if (tok.isPadded) {
+ zeros = padZeros(max, tok, options);
+ }
+
+ obj.string = zeros + obj.pattern + toQuantifier(obj.count);
+ tokens.push(obj);
+ start = max + 1;
+ prev = obj;
+ }
+
+ return tokens;
+}
+
+function filterPatterns(arr, comparison, prefix, intersection, options) {
+ let result = [];
+
+ for (let ele of arr) {
+ let { string } = ele;
+
+ // only push if _both_ are negative...
+ if (!intersection && !contains(comparison, 'string', string)) {
+ result.push(prefix + string);
+ }
+
+ // or _both_ are positive
+ if (intersection && contains(comparison, 'string', string)) {
+ result.push(prefix + string);
+ }
+ }
+ return result;
+}
+
+/**
+ * Zip strings
+ */
+
+function zip(a, b) {
+ let arr = [];
+ for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
+ return arr;
+}
+
+function compare$c(a, b) {
+ return a > b ? 1 : b > a ? -1 : 0;
+}
+
+function contains(arr, key, val) {
+ return arr.some(ele => ele[key] === val);
+}
+
+function countNines(min, len) {
+ return Number(String(min).slice(0, -len) + '9'.repeat(len));
+}
+
+function countZeros(integer, zeros) {
+ return integer - (integer % Math.pow(10, zeros));
+}
+
+function toQuantifier(digits) {
+ let [start = 0, stop = ''] = digits;
+ if (stop || start > 1) {
+ return `{${start + (stop ? ',' + stop : '')}}`;
+ }
+ return '';
+}
+
+function toCharacterClass(a, b, options) {
+ return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
+}
+
+function hasPadding(str) {
+ return /^-?(0+)\d/.test(str);
+}
+
+function padZeros(value, tok, options) {
+ if (!tok.isPadded) {
+ return value;
+ }
+
+ let diff = Math.abs(tok.maxLen - String(value).length);
+ let relax = options.relaxZeros !== false;
+
+ 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}}`;
+ }
+ }
+}
+
+/**
+ * Cache
+ */
+
+toRegexRange$1.cache = {};
+toRegexRange$1.clearCache = () => (toRegexRange$1.cache = {});
+
+/**
+ * Expose `toRegexRange`
+ */
+
+var toRegexRange_1 = toRegexRange$1;
+
+/*!
+ * fill-range <https://github.com/jonschlinkert/fill-range>
+ *
+ * Copyright (c) 2014-present, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+const util$3 = require$$0$4;
+const toRegexRange = toRegexRange_1;
+
+const isObject$2 = val => val !== null && typeof val === 'object' && !Array.isArray(val);
+
+const transform$3 = toNumber => {
+ return value => toNumber === true ? Number(value) : String(value);
+};
+
+const isValidValue = value => {
+ return typeof value === 'number' || (typeof value === 'string' && value !== '');
+};
+
+const isNumber$1 = num => Number.isInteger(+num);
+
+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;
+};
+
+const stringify$5 = (start, end, options) => {
+ if (typeof start === 'string' || typeof end === 'string') {
+ return true;
+ }
+ 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;
+};
+
+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;
+};
+
+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);
+
+ let prefix = options.capture ? '' : '?:';
+ let positives = '';
+ let negatives = '';
+ let result;
+
+ if (parts.positives.length) {
+ positives = parts.positives.join('|');
+ }
+
+ if (parts.negatives.length) {
+ negatives = `-(${prefix}${parts.negatives.join('|')})`;
+ }
+
+ if (positives && negatives) {
+ result = `${positives}|${negatives}`;
+ } else {
+ result = positives || negatives;
+ }
+
+ if (options.wrap) {
+ return `(${prefix}${result})`;
+ }
+
+ return result;
+};
+
+const toRange = (a, b, isNumbers, options) => {
+ if (isNumbers) {
+ return toRegexRange(a, b, { wrap: false, ...options });
+ }
+
+ let start = String.fromCharCode(a);
+ if (a === b) return start;
+
+ let stop = String.fromCharCode(b);
+ return `[${start}-${stop}]`;
+};
+
+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);
+};
+
+const rangeError = (...args) => {
+ return new RangeError('Invalid range arguments: ' + util$3.inspect(...args));
+};
+
+const invalidRange = (start, end, options) => {
+ if (options.strictRanges === true) throw rangeError([start, end]);
+ return [];
+};
+
+const invalidStep = (step, options) => {
+ if (options.strictRanges === true) {
+ throw new TypeError(`Expected step "${step}" to be a number`);
+ }
+ return [];
+};
+
+const fillNumbers = (start, end, step = 1, options = {}) => {
+ let a = Number(start);
+ let b = Number(end);
+
+ if (!Number.isInteger(a) || !Number.isInteger(b)) {
+ if (options.strictRanges === true) throw rangeError([start, end]);
+ return [];
+ }
+
+ // fix negative zero
+ if (a === 0) a = 0;
+ if (b === 0) b = 0;
+
+ let descending = a > b;
+ let startString = String(start);
+ let endString = String(end);
+ let stepString = String(step);
+ step = Math.max(Math.abs(step), 1);
+
+ 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);
+
+ if (options.toRegex && step === 1) {
+ return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
+ }
+
+ let parts = { negatives: [], positives: [] };
+ let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
+ let range = [];
+ let index = 0;
+
+ 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++;
+ }
+
+ if (options.toRegex === true) {
+ return step > 1
+ ? toSequence(parts, options)
+ : toRegex(range, null, { wrap: false, ...options });
+ }
+
+ return range;
+};
+
+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);
+ }
+
+
+ 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);
+
+ if (options.toRegex && step === 1) {
+ return toRange(min, max, false, options);
+ }
+
+ let range = [];
+ let index = 0;
+
+ while (descending ? a >= b : a <= b) {
+ range.push(format(a, index));
+ a = descending ? a - step : a + step;
+ index++;
+ }
+
+ if (options.toRegex === true) {
+ return toRegex(range, null, { wrap: false, options });
+ }
+
+ return range;
+};
+
+const fill$2 = (start, end, step, options = {}) => {
+ if (end == null && isValidValue(start)) {
+ return [start];
+ }
+
+ if (!isValidValue(start) || !isValidValue(end)) {
+ return invalidRange(start, end, options);
+ }
+
+ if (typeof step === 'function') {
+ return fill$2(start, end, 1, { transform: step });
+ }
+
+ if (isObject$2(step)) {
+ return fill$2(start, end, 0, step);
+ }
+
+ let opts = { ...options };
+ if (opts.capture === true) opts.wrap = true;
+ step = step || opts.step || 1;
+
+ if (!isNumber$1(step)) {
+ if (step != null && !isObject$2(step)) return invalidStep(step, opts);
+ return fill$2(start, end, 1, step);
+ }
+
+ if (isNumber$1(start) && isNumber$1(end)) {
+ return fillNumbers(start, end, step, opts);
+ }
+
+ return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
+};
+
+var fillRange = fill$2;
+
+const fill$1 = fillRange;
+const utils$1 = utils$3;
+
+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 = '';
+
+ if (node.isOpen === true) {
+ return prefix + node.value;
+ }
+ if (node.isClose === true) {
+ return prefix + node.value;
+ }
+
+ if (node.type === 'open') {
+ return invalid ? (prefix + node.value) : '(';
+ }
+
+ if (node.type === 'close') {
+ return invalid ? (prefix + node.value) : ')';
+ }
+
+ if (node.type === 'comma') {
+ return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
+ }
+
+ if (node.value) {
+ return node.value;
+ }
+
+ if (node.nodes && node.ranges > 0) {
+ let args = utils$1.reduce(node.nodes);
+ let range = fill$1(...args, { ...options, wrap: false, toRegex: true });
+
+ if (range.length !== 0) {
+ return args.length > 1 && range.length > 1 ? `(${range})` : range;
+ }
+ }
+
+ if (node.nodes) {
+ for (let child of node.nodes) {
+ output += walk(child, node);
+ }
+ }
+ return output;
+ };
+
+ return walk(ast);
+};
+
+var compile_1 = compile$1;
+
+const fill = fillRange;
+const stringify$4 = stringify$6;
+const utils = utils$3;
+
+const append = (queue = '', stash = '', enclose = false) => {
+ let result = [];
+
+ queue = [].concat(queue);
+ stash = [].concat(stash);
+
+ 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);
+};
+
+const expand$4 = (ast, options = {}) => {
+ let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
+
+ let walk = (node, parent = {}) => {
+ node.queue = [];
+
+ let p = parent;
+ let q = parent.queue;
+
+ while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
+ p = p.parent;
+ q = p.queue;
+ }
+
+ if (node.invalid || node.dollar) {
+ q.push(append(q.pop(), stringify$4(node, options)));
+ return;
+ }
+
+ if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
+ q.push(append(q.pop(), ['{}']));
+ return;
+ }
+
+ if (node.nodes && node.ranges > 0) {
+ let args = utils.reduce(node.nodes);
+
+ 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 = fill(...args, options);
+ if (range.length === 0) {
+ range = stringify$4(node, options);
+ }
+
+ q.push(append(q.pop(), range));
+ node.nodes = [];
+ return;
+ }
+
+ let enclose = utils.encloseBrace(node);
+ let queue = node.queue;
+ let block = node;
+
+ while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
+ block = block.parent;
+ queue = block.queue;
+ }
+
+ for (let i = 0; i < node.nodes.length; i++) {
+ let child = node.nodes[i];
+
+ if (child.type === 'comma' && node.type === 'brace') {
+ if (i === 1) queue.push('');
+ queue.push('');
+ continue;
+ }
+
+ if (child.type === 'close') {
+ q.push(append(q.pop(), queue, enclose));
+ continue;
+ }
+
+ if (child.value && child.type !== 'open') {
+ queue.push(append(queue.pop(), child.value));
+ continue;
+ }
+
+ if (child.nodes) {
+ walk(child, node);
+ }
+ }
+
+ return queue;
+ };
+
+ return utils.flatten(walk(ast));
+};
+
+var expand_1 = expand$4;
+
+var constants$2 = {
+ MAX_LENGTH: 1024 * 64,
+
+ // Digits
+ CHAR_0: '0', /* 0 */
+ CHAR_9: '9', /* 9 */
+
+ // Alphabet chars.
+ CHAR_UPPERCASE_A: 'A', /* A */
+ CHAR_LOWERCASE_A: 'a', /* a */
+ CHAR_UPPERCASE_Z: 'Z', /* Z */
+ CHAR_LOWERCASE_Z: 'z', /* z */
+
+ CHAR_LEFT_PARENTHESES: '(', /* ( */
+ CHAR_RIGHT_PARENTHESES: ')', /* ) */
+
+ 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 */
+};
+
+const stringify$3 = stringify$6;
+
+/**
+ * Constants
+ */
+
+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;
+
+/**
+ * parse
+ */
+
+const parse$c = (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$3, opts.maxLength) : MAX_LENGTH$3;
+ if (input.length > max) {
+ throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
+ }
+
+ 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;
+
+ /**
+ * Helpers
+ */
+
+ const advance = () => input[index++];
+ const push = node => {
+ if (node.type === 'text' && prev.type === 'dot') {
+ prev.type = 'text';
+ }
+
+ if (prev && prev.type === 'text' && node.type === 'text') {
+ prev.value += node.value;
+ return;
+ }
+
+ block.nodes.push(node);
+ node.parent = block;
+ node.prev = prev;
+ prev = node;
+ return node;
+ };
+
+ push({ type: 'bos' });
+
+ while (index < length) {
+ block = stack[stack.length - 1];
+ value = advance();
+
+ /**
+ * Invalid chars
+ */
+
+ if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
+ continue;
+ }
+
+ /**
+ * Escaped chars
+ */
+
+ if (value === CHAR_BACKSLASH) {
+ push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
+ continue;
+ }
+
+ /**
+ * Right square bracket (literal): ']'
+ */
+
+ if (value === CHAR_RIGHT_SQUARE_BRACKET$1) {
+ push({ type: 'text', value: '\\' + value });
+ continue;
+ }
+
+ /**
+ * Left square bracket: '['
+ */
+
+ if (value === CHAR_LEFT_SQUARE_BRACKET$1) {
+ brackets++;
+ let next;
+
+ while (index < length && (next = advance())) {
+ value += next;
+
+ if (next === CHAR_LEFT_SQUARE_BRACKET$1) {
+ brackets++;
+ continue;
+ }
+
+ if (next === CHAR_BACKSLASH) {
+ value += advance();
+ continue;
+ }
+
+ if (next === CHAR_RIGHT_SQUARE_BRACKET$1) {
+ brackets--;
+
+ if (brackets === 0) {
+ break;
+ }
+ }
+ }
+
+ push({ type: 'text', value });
+ continue;
+ }
+
+ /**
+ * Parentheses
+ */
+
+ if (value === CHAR_LEFT_PARENTHESES) {
+ block = push({ type: 'paren', nodes: [] });
+ stack.push(block);
+ push({ type: 'text', value });
+ continue;
+ }
+
+ 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;
+ }
+
+ /**
+ * Quotes: '|"|`
+ */
+
+ if (value === CHAR_DOUBLE_QUOTE$1 || value === CHAR_SINGLE_QUOTE$1 || value === CHAR_BACKTICK) {
+ let open = value;
+ let next;
+
+ if (options.keepQuotes !== true) {
+ value = '';
+ }
+
+ while (index < length && (next = advance())) {
+ if (next === CHAR_BACKSLASH) {
+ value += next + advance();
+ continue;
+ }
+
+ if (next === open) {
+ if (options.keepQuotes === true) value += next;
+ break;
+ }
+
+ value += next;
+ }
+
+ push({ type: 'text', value });
+ continue;
+ }
+
+ /**
+ * Left curly brace: '{'
+ */
+
+ if (value === CHAR_LEFT_CURLY_BRACE) {
+ depth++;
+
+ 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: []
+ };
+
+ block = push(brace);
+ stack.push(block);
+ push({ type: 'open', value });
+ continue;
+ }
+
+ /**
+ * Right curly brace: '}'
+ */
+
+ if (value === CHAR_RIGHT_CURLY_BRACE) {
+ if (block.type !== 'brace') {
+ push({ type: 'text', value });
+ continue;
+ }
+
+ let type = 'close';
+ block = stack.pop();
+ block.close = true;
+
+ push({ type, value });
+ depth--;
+
+ block = stack[stack.length - 1];
+ continue;
+ }
+
+ /**
+ * Comma: ','
+ */
+
+ 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) }];
+ }
+
+ push({ type: 'comma', value });
+ block.commas++;
+ continue;
+ }
+
+ /**
+ * Dot: '.'
+ */
+
+ if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
+ let siblings = block.nodes;
+
+ if (depth === 0 || siblings.length === 0) {
+ push({ type: 'text', value });
+ continue;
+ }
+
+ if (prev.type === 'dot') {
+ block.range = [];
+ prev.value += value;
+ prev.type = 'range';
+
+ if (block.nodes.length !== 3 && block.nodes.length !== 5) {
+ block.invalid = true;
+ block.ranges = 0;
+ prev.type = 'text';
+ continue;
+ }
+
+ block.ranges++;
+ block.args = [];
+ continue;
+ }
+
+ if (prev.type === 'range') {
+ siblings.pop();
+
+ let before = siblings[siblings.length - 1];
+ before.value += prev.value + value;
+ prev = before;
+ block.ranges--;
+ continue;
+ }
+
+ push({ type: 'dot', value });
+ continue;
+ }
+
+ /**
+ * Text
+ */
+
+ push({ type: 'text', value });
+ }
+
+ // 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;
+ }
+ });
+
+ // 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);
+
+ push({ type: 'eos' });
+ return ast;
+};
+
+var parse_1$1 = parse$c;
+
+const stringify$2 = stringify$6;
+const compile = compile_1;
+const expand$3 = expand_1;
+const parse$b = parse_1$1;
+
+/**
+ * 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
+ */
+
+const braces$1 = (input, options = {}) => {
+ let output = [];
+
+ if (Array.isArray(input)) {
+ for (let pattern of input) {
+ let result = braces$1.create(pattern, options);
+ if (Array.isArray(result)) {
+ output.push(...result);
} else {
- then(result);
+ output.push(result);
+ }
+ }
+ } else {
+ output = [].concat(braces$1.create(input, options));
+ }
+
+ if (options && options.expand === true && options.nodupes === true) {
+ output = [...new Set(output)];
+ }
+ return output;
+};
+
+/**
+ * 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
+ */
+
+braces$1.parse = (input, options = {}) => parse$b(input, options);
+
+/**
+ * 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
+ */
+
+braces$1.stringify = (input, options = {}) => {
+ if (typeof input === 'string') {
+ return stringify$2(braces$1.parse(input, options), options);
+ }
+ return stringify$2(input, options);
+};
+
+/**
+ * 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
+ */
+
+braces$1.compile = (input, options = {}) => {
+ if (typeof input === 'string') {
+ input = braces$1.parse(input, options);
+ }
+ return compile(input, options);
+};
+
+/**
+ * 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
+ */
+
+braces$1.expand = (input, options = {}) => {
+ if (typeof input === 'string') {
+ input = braces$1.parse(input, options);
+ }
+
+ let result = expand$3(input, options);
+
+ // filter out empty strings if specified
+ if (options.noempty === true) {
+ result = result.filter(Boolean);
+ }
+
+ // filter out duplicates if specified
+ if (options.nodupes === true) {
+ result = [...new Set(result)];
+ }
+
+ return result;
+};
+
+/**
+ * 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
+ */
+
+braces$1.create = (input, options = {}) => {
+ if (input === '' || input.length < 3) {
+ return [input];
+ }
+
+ return options.expand !== true
+ ? braces$1.compile(input, options)
+ : braces$1.expand(input, options);
+};
+
+/**
+ * Expose "braces"
+ */
+
+var braces_1 = braces$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"
+];
+
+var binaryExtensions$1 = require$$0$1;
+
+const path$8 = path$b;
+const binaryExtensions = binaryExtensions$1;
+
+const extensions = new Set(binaryExtensions);
+
+var isBinaryPath$1 = filePath => extensions.has(path$8.extname(filePath).slice(1).toLowerCase());
+
+var constants$1 = {};
+
+(function (exports) {
+
+const {sep} = path$b;
+const {platform} = process;
+const os = require$$0$2;
+
+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';
+
+exports.STR_DATA = 'data';
+exports.STR_END = 'end';
+exports.STR_CLOSE = 'close';
+
+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';
+
+exports.KEY_LISTENERS = 'listeners';
+exports.KEY_ERR = 'errHandlers';
+exports.KEY_RAW = 'rawEmitters';
+exports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];
+
+exports.DOT_SLASH = `.${sep}`;
+
+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 = /^\.[/\\]/;
+
+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;
+
+exports.isWindows = platform === 'win32';
+exports.isMacos = platform === 'darwin';
+exports.isLinux = platform === 'linux';
+exports.isIBMi = os.type() === 'OS400';
+}(constants$1));
+
+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;
+
+const THROTTLE_MODE_WATCH = 'watch';
+
+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);
+
+const statMethods$1 = { lstat: lstat$1, stat: stat$2 };
+
+// TODO: emit errors properly. Example: EMFILE on Macos.
+const foreach = (val, fn) => {
+ if (val instanceof Set) {
+ val.forEach(fn);
+ } else {
+ fn(val);
+ }
+};
+
+const addAndConvert = (main, prop, item) => {
+ let container = main[prop];
+ if (!(container instanceof Set)) {
+ main[prop] = container = new Set([container]);
+ }
+ container.add(item);
+};
+
+const clearItem = cont => key => {
+ const set = cont[key];
+ if (set instanceof Set) {
+ set.clear();
+ } else {
+ delete cont[key];
+ }
+};
+
+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;
+
+/**
+ * @typedef {String} Path
+ */
+
+// fs_watch helpers
+
+// object to hold per-process fs_watch instances
+// (may be shared across chokidar FSWatcher instances)
+
+/**
+ * @typedef {Object} FsWatchContainer
+ * @property {Set} listeners
+ * @property {Set} errHandlers
+ * @property {Set} rawEmitters
+ * @property {fs.FSWatcher=} watcher
+ * @property {Boolean=} watcherUnusable
+ */
+
+/**
+ * @type {Map<String,FsWatchContainer>}
+ */
+const FsWatchInstances = new Map();
+
+/**
+ * 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});
+
+ // 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);
+ }
+}
+
+/**
+ * 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);
+ });
+};
+
+/**
+ * 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);
+
+ /** @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);
+
+ // 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);
}
+ };
+};
+
+// 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);
+
+ const copts = cont && cont.options;
+ if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {
+ fs$8.unwatchFile(fullPath);
+ cont = undefined;
}
- // Invoke `next`, only once.
- function done() {
- if (!invoked) {
- invoked = true;
+ /* eslint-enable no-unused-vars, prefer-destructuring */
+
+ 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);
- callback.apply(null, arguments);
+ // 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);
}
+ };
+};
+
+/**
+ * @mixin
+ */
+class NodeFsHandler$1 {
+
+/**
+ * @param {import("../index").FSWatcher} fsW
+ */
+constructor(fsW) {
+ this.fsw = fsW;
+ this._boundHandleError = (error) => fsW._handleError(error);
+}
+
+/**
+ * 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;
+
+ 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;
+}
- // Invoke `done` with one value.
- // Tracks if an error is passed, too.
- function then(value) {
- done(null, value);
+/**
+ * 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;
+
+ 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);
+
+ // 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 wrap$2 = wrap_1;
+/**
+ * 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<Boolean>} 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);
-var trough_1 = trough$4;
+ 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;
+ }
+
+ // don't follow the same symlink more than once
+ if (this.fsw._symlinkPaths.has(full)) {
+ return true;
+ }
+
+ this.fsw._symlinkPaths.set(full, true);
+}
-trough$4.wrap = wrap$2;
+_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {
+ // Normalize the directory name on Windows
+ directory = sysPath$2.join(directory, EMPTY_STR$1);
-var slice$3 = [].slice;
+ if (!wh.hasGlob) {
+ throttler = this.fsw._throttle('readdir', directory, 1000);
+ if (!throttler) return;
+ }
-// Create new middleware.
-function trough$4() {
- var fns = [];
- var middleware = {};
+ const previous = this.fsw._getWatchedDir(wh.path);
+ const current = new Set();
- middleware.run = run;
- middleware.use = use;
+ 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);
- return middleware
+ if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {
+ return;
+ }
- // 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 (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();
+
+ // ensure relativeness of path is preserved in case of watcher reuse
+ path = sysPath$2.join(dir, sysPath$2.relative(dir, path));
+
+ this._addToNodeFs(path, initialAdd, wh, depth + 1);
+ }
+ }).on(EV_ERROR$2, this._boundHandleError);
+
+ return new Promise(resolve =>
+ stream.once(STR_END$2, () => {
+ if (this.fsw.closed) {
+ stream = undefined;
+ return;
+ }
+ const wasThrottled = throttler ? throttler.clear() : false;
+
+ resolve();
+
+ // 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);
+ });
+
+ stream = undefined;
+
+ // one more time for any missed in case changes came in extremely quickly
+ if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);
+ })
+ );
+}
+
+/**
+ * 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<Function>} 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);
+ }
+
+ // ensure dir is tracked (harmless if redundant)
+ parentDir.add(sysPath$2.basename(dir));
+ this.fsw._getWatchedDir(dir);
+ let throttler;
+ let closer;
+
+ 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;
+ }
+
+ closer = this._watchWithNodeFs(dir, (dirPath, stats) => {
+ // if current directory is removed, do nothing
+ if (stats && stats.mtimeMs === 0) return;
+
+ this._handleRead(dirPath, false, wh, target, dir, depth, throttler);
+ });
+ }
+ 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;
+ }
+
+ 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);
+ }
+
+ // 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;
+ }
+
+ 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;
+
+ // 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();
+
+ this.fsw._addPathCloser(path, closer);
+ return false;
+
+ } catch (error) {
+ if (this.fsw._handleError(error)) {
+ ready();
+ return path;
+ }
+ }
+}
+
+}
+
+var nodefsHandler = NodeFsHandler$1;
+
+var fseventsHandler = {exports: {}};
+
+const fs$7 = require$$0$3;
+const sysPath$1 = path$b;
+const { promisify: promisify$1 } = require$$0$4;
+
+let fsevents;
+try {
+ fsevents = undefined;
+} catch (error) {
+ if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);
+}
+
+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 {
+ 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,
+
+ ROOT_GLOBSTAR,
+ DIR_SUFFIX,
+ DOT_SLASH,
+ FUNCTION_TYPE: FUNCTION_TYPE$1,
+ EMPTY_FN: EMPTY_FN$1,
+ IDENTITY_FN
+} = constants$1;
+
+const Depth = (value) => isNaN(value) ? {} : {depth: value};
+
+const stat$1 = promisify$1(fs$7.stat);
+const lstat = promisify$1(fs$7.lstat);
+const realpath$1 = promisify$1(fs$7.realpath);
+
+const statMethods = { stat: stat$1, lstat };
+
+/**
+ * @typedef {String} Path
+ */
+
+/**
+ * @typedef {Object} FsEventsWatchContainer
+ * @property {Set<Function>} listeners
+ * @property {Function} rawEmitter
+ * @property {{stop: Function}} watcher
+ */
+
+// fsevents instance helper functions
+/**
+ * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)
+ * @type {Map<Path,FsEventsWatchContainer>}
+ */
+const FSEventsWatchers = new Map();
+
+// Threshold of duplicate path prefixes at which to start
+// consolidating going forward
+const consolidateThreshhold = 10;
+
+const wrongEventFlags = new Set([
+ 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912
+]);
+
+/**
+ * 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};
+};
+
+/**
+ * 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);
+
+ // 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;
+ }
+
+ 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 + 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;
+ }
+ }
+
+ 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);
+ });
+
+ cont.rawEmitter(info.event, fullPath, info);
+ })
+ };
+ FSEventsWatchers.set(watchPath, cont);
+ }
+
+ // 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);
+ });
+ }
+ };
+}
+
+// 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;
+ }
+ }
+ }
+
+ return false;
+};
+
+// returns boolean indicating whether fsevents can be used
+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 = 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;
+ }
+
+ ipaths.delete(path);
+ ipaths.delete(path + ROOT_GLOBSTAR);
+}
+
+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);
+}
+
+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);
+ }
+ } 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);
+ }
+ }
+}
+
+handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {
+ if (this.fsw.closed || this.checkIgnored(path)) return;
+
+ 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);
+
+ 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);
+ }
+
+ // 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);
+ }
+}
+
+/**
+ * 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
+ );
+
+ // 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);
+ }
+ } 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);
+ }
+ }
+ };
+
+ 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<void>}
+ */
+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();
+ }
+ }
+}
+
+/**
+ *
+ * @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);
+ }
+}
+
+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<void>}
+ */
+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;
+
+ 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;
+ }
+ if (stats.isDirectory()) {
+ // emit addDir unless this is a glob parent
+ if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);
+
+ // don't recurse further if it would exceed depth setting
+ if (priorDepth && priorDepth > opts.depth) return;
+
+ // 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 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, sysPath$1.resolve(wh.watchPath)) + 1;
+
+ 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 (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);
+ }
+ }
+}
+
+}
+
+fseventsHandler.exports = FsEventsHandler$1;
+fseventsHandler.exports.canUse = canUse;
+
+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;
+
+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,
+
+ STR_CLOSE,
+ STR_END,
+
+ BACK_SLASH_RE,
+ DOUBLE_SLASH_RE,
+ SLASH_OR_BACK_SLASH_RE,
+ DOT_RE,
+ REPLACER_RE,
+
+ 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);
+
+/**
+ * @typedef {String} Path
+ * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName
+ * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType
+ */
+
+/**
+ *
+ * @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
+ */
+
+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;
+};
+
+const unifyPaths = (paths_) => {
+ /**
+ * @type {Array<String>}
+ */
+ 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$1);
+ let prepend = false;
+ if (str.startsWith(SLASH_SLASH)) {
+ prepend = true;
+ }
+ while (str.match(DOUBLE_SLASH_RE)) {
+ str = str.replace(DOUBLE_SLASH_RE, SLASH$1);
+ }
+ if (prepend) {
+ str = SLASH$1 + str;
+ }
+ return str;
+};
+
+// 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 (path.startsWith(BANG)) {
+ return BANG + sysPath.join(cwd, path.slice(1));
+ }
+ return sysPath.join(cwd, path);
+};
+
+const undef = (opts, key) => opts[key] === undefined;
+
+/**
+ * Directory entry.
+ * @property {Path} path
+ * @property {Set<Path>} items
+ */
+class DirEntry {
+ /**
+ * @param {Path} dir
+ * @param {Function} removeWatcher
+ */
+ constructor(dir, removeWatcher) {
+ this.path = dir;
+ this._removeWatcher = removeWatcher;
+ /** @type {Set<Path>} */
+ this.items = new Set();
+ }
+
+ add(item) {
+ const {items} = this;
+ if (!items) return;
+ if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);
+ }
+
+ 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));
+ }
+ }
+ }
+
+ has(item) {
+ const {items} = this;
+ if (!items) return;
+ return items.has(item);
+ }
- if (typeof done !== 'function') {
- throw new Error('Expected function as last argument, not ' + done)
+ /**
+ * @returns {Array<String>}
+ */
+ 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);
+ }
+}
+
+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;
+ }
+
+ 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);
+ }
+}
- next.apply(null, [null].concat(input));
+/**
+ * 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();
- // 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 opts = {};
+ if (_opts) Object.assign(opts, _opts); // for frozen objects
+ /** @type {Map<String, DirEntry>} */
+ this._watched = new Map();
+ /** @type {Map<String, Array>} */
+ this._closers = new Map();
+ /** @type {Set<String>} */
+ this._ignoredPaths = new Set();
+
+ /** @type {Map<ThrottleType, Map>} */
+ this._throttled = new Map();
+
+ /** @type {Map<Path, String|Boolean>} */
+ this._symlinkPaths = new Map();
+
+ this._streams = new Set();
+ this.closed = false;
+
+ // 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;
+
+ // Enable fsevents on OS X when polling isn't explicitly enabled.
+ 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();
+ if (!canUseFsEvents) opts.useFsEvents = false;
+
+ // Use polling on Mac if not using fsevents.
+ // Other platforms use non-polling fs_watch.
+ if (undef(opts, 'usePolling') && !opts.useFsEvents) {
+ 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;
+ if (envPoll !== undefined) {
+ const envLower = envPoll.toLowerCase();
+
+ 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);
+ }
+
+ // 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 (undef(opts, 'followSymlinks')) opts.followSymlinks = true;
+
+ 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);
+
+ 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;
+
+ // Initialize with proper watcher.
+ if (opts.useFsEvents) {
+ this._fsEventsHandler = new FsEventsHandler(this);
+ } else {
+ this._nodeFsHandler = new NodeFsHandler(this);
+ }
+
+ // You’re frozen when your heart’s not open.
+ Object.freeze(opts);
+}
+
+// Public methods
+
+/**
+ * Adds paths to be watched on an existing FSWatcher instance
+ * @param {Path|Array<Path>} 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);
+ });
+ }
+
+ // set aside negated glob strings
+ paths = paths.filter((path) => {
+ if (path.startsWith(BANG)) {
+ this._ignoredPaths.add(path.slice(1));
+ return false;
+ }
+
+ // if a path is being added that was previously ignored, stop ignoring it
+ this._ignoredPaths.delete(path);
+ this._ignoredPaths.delete(path + SLASH_GLOBSTAR);
+
+ // reset the cached userIgnored anymatch fn
+ // to make ignoredPaths changes effective
+ this._userIgnored = undefined;
+
+ return true;
+ });
+
+ 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));
+ });
+ });
+ }
+
+ return this;
+}
+
+/**
+ * Close watchers or start ignoring events from specified paths.
+ * @param {Path|Array<Path>} 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;
+
+ 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);
+ }
+
+ this._closePath(path);
+
+ this._ignoredPaths.add(path);
+ if (this._watched.has(path)) {
+ this._ignoredPaths.add(path + SLASH_GLOBSTAR);
+ }
+
+ // reset the cached userIgnored anymatch fn
+ // to make ignoredPaths changes effective
+ this._userIgnored = undefined;
+ });
+
+ return this;
+}
+
+/**
+ * Close watchers and remove all listeners from watched paths.
+ * @returns {Promise<void>}.
+*/
+close() {
+ if (this.closed) return this._closePromise;
+ this.closed = true;
+
+ // 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();
+ });
+
+ this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();
+ return this._closePromise;
+}
+
+/**
+ * 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;
+}
+
+emitWithAll(event, args) {
+ this.emit(...args);
+ if (event !== EV_ERROR) this.emit(EV_ALL, ...args);
+}
+
+// Common helpers
+// --------------
+
+/**
+ * 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;
+
+ const opts = this.options;
+ if (isWindows$2) path = sysPath.normalize(path);
+ if (opts.cwd) path = sysPath.relative(opts.cwd, path);
+ /** @type Array<any> */
+ 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);
+
+ const awf = opts.awaitWriteFinish;
+ let pw;
+ if (awf && (pw = this._pendingWrites.get(path))) {
+ pw.lastChange = new Date();
+ return this;
+ }
+
+ 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);
+ }
+ }
+
+ if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) {
+ const awfEmit = (err, stats) => {
if (err) {
- done(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);
+ }
+ };
+
+ this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);
+ return this;
+ }
+
+ if (event === EV_CHANGE) {
+ const isThrottled = !this._throttle(EV_CHANGE, path, 50);
+ if (isThrottled) return this;
+ }
+
+ 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);
+
+ return this;
+}
+
+/**
+ * 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;
+}
+
+/**
+ * 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());
+ }
+
+ /** @type {Map<Path, Object>} */
+ const action = this._throttled.get(actionType);
+ /** @type {Object} */
+ const actionPath = action.get(path);
+
+ if (actionPath) {
+ actionPath.count++;
+ return false;
+ }
+
+ 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++;
+}
+
+/**
+ * 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;
+
+ let fullPath = path;
+ if (this.options.cwd && !sysPath.isAbsolute(path)) {
+ fullPath = sysPath.join(this.options.cwd, path);
+ }
+
+ const now = new Date();
+
+ const awaitWriteFinish = (prevStat) => {
+ fs$6.stat(fullPath, (err, curStat) => {
+ if (err || !this._pendingWrites.has(path)) {
+ if (err && err.code !== 'ENOENT') awfEmit(err);
+ return;
+ }
+
+ const now = Number(new Date());
+
+ 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
+ );
+ }
+}
+
+_getGlobIgnored() {
+ return [...this._ignoredPaths.values()];
+}
+
+/**
+ * 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;
+
+ 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);
+ }
+
+ return this._userIgnored([path, stats]);
+}
+
+_isntIgnored(path, stat) {
+ return !this._isIgnored(path, stat);
+}
+
+/**
+ * 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;
+
+ return new WatchHelper(path, watchPath, follow, this);
+}
+
+// Directory helpers
+// -----------------
+
+/**
+ * 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);
+}
+
+// File helpers
+// ------------
+
+/**
+ * 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;
+
+ // 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);
+}
+
+/**
+ * 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);
+
+ // 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 the only watched file is removed, watch for its return
+ if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {
+ this.add(directory, item, true);
+ }
+
+ // 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();
+
+ // Recursively remove children directories / files.
+ nestedDirectoryChildren.forEach(nested => this._remove(path, nested));
+
+ // Check if item was on the watched list and remove it
+ const parent = this._getWatchedDir(directory);
+ const wasTracked = parent.has(item);
+ parent.remove(item);
+
+ // 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 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;
+ }
+
+ // 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);
+
+ // Avoid conflicts if we later create another file with the same name
+ if (!this.options.useFsEvents) {
+ this._closePath(path);
+ }
+}
+
+/**
+ * Closes all watchers for a path
+ * @param {Path} path
+ */
+_closePath(path) {
+ this._closeFile(path);
+ const dir = sysPath.dirname(path);
+ this._getWatchedDir(dir).remove(sysPath.basename(path));
+}
+
+/**
+ * Closes only file-specific watchers
+ * @param {Path} path
+ */
+_closeFile(path) {
+ const closers = this._closers.get(path);
+ if (!closers) return;
+ closers.forEach(closer => closer());
+ this._closers.delete(path);
+}
+
+/**
+ *
+ * @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);
+}
+
+_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;
+}
+
+}
+
+// Export FSWatcher class
+chokidar.FSWatcher = FSWatcher;
+
+/**
+ * Instantiates watcher with paths to be tracked.
+ * @param {String|Array<String>} 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;
+};
+
+chokidar.watch = watch;
+
+/**
+ * @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
+ */
+
+/**
+ * Get stats for a file, list of files, or list of messages.
+ *
+ * @param {Array.<VFile|VFileMessage>|VFile|VFileMessage} [value]
+ * @returns {Statistics}
+ */
+function statistics(value) {
+ var result = {true: 0, false: 0, null: 0};
+
+ if (value) {
+ if (Array.isArray(value)) {
+ list(value);
+ } else {
+ one(value);
+ }
+ }
+
+ return {
+ fatal: result.true,
+ nonfatal: result.false + result.null,
+ warn: result.false,
+ info: result.null,
+ total: result.true + result.false + result.null
+ }
+
+ /**
+ * @param {Array.<VFile|VFileMessage>} value
+ * @returns {void}
+ */
+ function list(value) {
+ var index = -1;
+
+ while (++index < value.length) {
+ one(value[index]);
+ }
+ }
+
+ /**
+ * @param {VFile|VFileMessage} value
+ * @returns {void}
+ */
+ function one(value) {
+ if ('messages' in value) return list(value.messages)
+
+ result[
+ value.fatal === undefined || value.fatal === null
+ ? null
+ : Boolean(value.fatal)
+ ]++;
+ }
+}
+
+/**
+ * @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
+ */
+
+/**
+ * Create new middleware.
+ *
+ * @returns {Pipeline}
+ */
+function trough() {
+ /** @type {Middleware[]} */
+ const fns = [];
+ /** @type {Pipeline} */
+ const pipeline = {run, use};
+
+ return pipeline
+
+ /** @type {Run} */
+ function run(...values) {
+ let middlewareIndex = -1;
+ /** @type {Callback} */
+ const callback = values.pop();
+
+ if (typeof callback !== 'function') {
+ throw new TypeError('Expected function as last argument, not ' + callback)
+ }
+
+ next(null, ...values);
+
+ /**
+ * 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;
+
+ if (error) {
+ callback(error);
return
}
- // Copy non-nully input into values.
- while (++pos < length) {
- if (values[pos] === null || values[pos] === undefined) {
- values[pos] = input[pos];
+ // Copy non-nullish input into values.
+ while (++index < values.length) {
+ if (output[index] === null || output[index] === undefined) {
+ output[index] = values[index];
}
}
- input = values;
+ // Save the newly created `output` for the next call.
+ values = output;
// Next or done.
if (fn) {
- wrap$2(fn, next).apply(null, input);
+ wrap(fn, next)(...output);
} else {
- done.apply(null, [null].concat(input));
+ callback(null, ...output);
}
}
}
- // Add `fn` to the list.
- function use(fn) {
- if (typeof fn !== 'function') {
- throw new Error('Expected `fn` to be a function, not ' + fn)
+ /** @type {Use} */
+ function use(middelware) {
+ if (typeof middelware !== 'function') {
+ throw new TypeError(
+ 'Expected `middelware` to be a function, not ' + middelware
+ )
}
- fns.push(fn);
-
- return middleware
+ fns.push(middelware);
+ return pipeline
}
}
-var jsYaml$2 = {};
+/**
+ * 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;
+
+ return wrapped
+
+ /**
+ * Call `middleware`.
+ * @param {any[]} parameters
+ * @returns {void}
+ */
+ function wrapped(...parameters) {
+ const fnExpectsCallback = middleware.length > parameters.length;
+ /** @type {any} */
+ let result;
-var loader$2 = {};
+ if (fnExpectsCallback) {
+ parameters.push(done);
+ }
-var common$b = {};
+ try {
+ result = middleware(...parameters);
+ } catch (error) {
+ /** @type {Error} */
+ const exception = error;
-function isNothing$1(subject) {
+ // 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);
+ }
+}
+
+/*! 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$1(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$4(target, source) {
+function extend$2(target, source) {
var index, length, key, sourceKeys;
if (source) {
@@ -294,7 +8650,7 @@ function extend$4(target, source) {
}
-function repeat$8(string, count) {
+function repeat$1(string, count) {
var result = '', cycle;
for (cycle = 0; cycle < count; cycle += 1) {
@@ -305,26 +8661,57 @@ function repeat$8(string, count) {
}
-function isNegativeZero$1(number) {
+function isNegativeZero(number) {
return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);
}
-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 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;
+
+var common$4 = {
+ 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 formatError(exception, compact) {
+ var where = '', message = exception.reason || '(unknown reason)';
+
+ if (!exception.mark) return message;
+
+ if (exception.mark.name) {
+ where += 'in "' + exception.mark.name + '" ';
+ }
+
+ where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';
+
+ if (!compact && exception.mark.snippet) {
+ where += '\n\n' + exception.mark.snippet;
+ }
+
+ return message + ' ' + where;
+}
-function YAMLException$6(reason, mark) {
+
+function YAMLException$1(reason, mark) {
// Super constructor
Error.call(this);
this.name = 'YAMLException';
this.reason = reason;
this.mark = mark;
- this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : '');
+ this.message = formatError(this, false);
// Include stack trace in error object
if (Error.captureStackTrace) {
@@ -338,119 +8725,133 @@ function YAMLException$6(reason, mark) {
// Inherit from Error
-YAMLException$6.prototype = Object.create(Error.prototype);
-YAMLException$6.prototype.constructor = YAMLException$6;
+YAMLException$1.prototype = Object.create(Error.prototype);
+YAMLException$1.prototype.constructor = YAMLException$1;
-YAMLException$6.prototype.toString = function toString(compact) {
- var result = this.name + ': ';
+YAMLException$1.prototype.toString = function toString(compact) {
+ return this.name + ': ' + formatError(this, compact);
+};
- result += this.reason || '(unknown reason)';
- if (!compact && this.mark) {
- result += ' ' + this.mark.toString();
- }
+var exception = YAMLException$1;
- return result;
-};
+// 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;
+ if (position - lineStart > maxHalfLength) {
+ head = ' ... ';
+ lineStart = position - maxHalfLength + head.length;
+ }
-var exception$1 = YAMLException$6;
+ if (lineEnd - position > maxHalfLength) {
+ tail = ' ...';
+ lineEnd = position + maxHalfLength - tail.length;
+ }
-var common$a = common$b;
+ return {
+ str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail,
+ pos: position - lineStart + head.length // relative position
+ };
+}
-function Mark$1(name, buffer, position, line, column) {
- this.name = name;
- this.buffer = buffer;
- this.position = position;
- this.line = line;
- this.column = column;
+function padStart(string, max) {
+ return common$4.repeat(' ', max - string.length) + string;
}
-Mark$1.prototype.getSnippet = function getSnippet(indent, maxLength) {
- var head, start, tail, end, snippet;
-
- if (!this.buffer) return null;
+function makeSnippet(mark, options) {
+ options = Object.create(options || null);
- indent = indent || 4;
- maxLength = maxLength || 75;
+ if (!mark.buffer) return null;
- head = '';
- start = this.position;
+ 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;
- 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;
- }
- }
+ var re = /\r?\n|\r|\0/g;
+ var lineStarts = [ 0 ];
+ var lineEnds = [];
+ var match;
+ var foundLineNo = -1;
- tail = '';
- end = this.position;
+ while ((match = re.exec(mark.buffer))) {
+ lineEnds.push(match.index);
+ lineStarts.push(match.index + match[0].length);
- 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;
+ if (mark.position <= match.index && foundLineNo < 0) {
+ foundLineNo = lineStarts.length - 2;
}
}
- snippet = this.buffer.slice(start, end);
-
- return common$a.repeat(' ', indent) + head + snippet + tail + '\n' +
- common$a.repeat(' ', indent + this.position - start + head.length) + '^';
-};
-
+ if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;
-Mark$1.prototype.toString = function toString(compact) {
- var snippet, where = '';
+ var result = '', i, line;
+ var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;
+ var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);
- if (this.name) {
- where += 'in "' + this.name + '" ';
+ 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;
}
- where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1);
-
- if (!compact) {
- snippet = this.getSnippet();
+ 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 (snippet) {
- where += ':\n' + snippet;
- }
+ 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';
}
- return where;
-};
-
+ return result.replace(/\n$/, '');
+}
-var mark$1 = Mark$1;
-var YAMLException$5 = exception$1;
+var snippet = makeSnippet;
-var TYPE_CONSTRUCTOR_OPTIONS$1 = [
+var TYPE_CONSTRUCTOR_OPTIONS = [
'kind',
+ 'multi',
'resolve',
'construct',
'instanceOf',
'predicate',
'represent',
+ 'representName',
'defaultStyle',
'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) {
@@ -464,73 +8865,85 @@ function compileStyleAliases$1(map) {
return result;
}
-function Type$j(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 YAMLException$5('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.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);
+ 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);
- if (YAML_NODE_KINDS$1.indexOf(this.kind) === -1) {
- throw new YAMLException$5('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$j;
+var type$1 = Type$1;
/*eslint-disable max-len*/
-var common$9 = common$b;
-var YAMLException$4 = exception$1;
-var Type$i = type$1;
-function compileList$1(schema, name, result) {
- var exclude = [];
- schema.include.forEach(function (includedSchema) {
- result = compileList$1(includedSchema, name, result);
- });
+
+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) {
- exclude.push(previousIndex);
+ if (previousType.tag === currentType.tag &&
+ previousType.kind === currentType.kind &&
+ previousType.multi === currentType.multi) {
+
+ 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: {},
mapping: {},
- fallback: {}
+ fallback: {},
+ multi: {
+ scalar: [],
+ sequence: [],
+ mapping: [],
+ fallback: []
+ }
}, index, length;
function collectType(type) {
- result[type.kind][type.tag] = result['fallback'][type.tag] = type;
+ if (type.multi) {
+ result.multi[type.kind].push(type);
+ result.multi['fallback'].push(type);
+ } else {
+ result[type.kind][type.tag] = result['fallback'][type.tag] = type;
+ }
}
for (index = 0, length = arguments.length; index < length; index += 1) {
@@ -540,99 +8953,92 @@ function compileMap$1(/* lists... */) {
}
-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 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$1(this, 'implicit', []);
- this.compiledExplicit = compileList$1(this, 'explicit', []);
- this.compiledTypeMap = compileMap$1(this.compiledImplicit, this.compiledExplicit);
+function Schema$1(definition) {
+ return this.extend(definition);
}
-Schema$7.DEFAULT = null;
-
+Schema$1.prototype.extend = function extend(definition) {
+ var implicit = [];
+ var explicit = [];
-Schema$7.create = function createSchema() {
- var schemas, types;
+ if (definition instanceof type$1) {
+ // Schema.extend(type)
+ explicit.push(definition);
- switch (arguments.length) {
- case 1:
- schemas = Schema$7.DEFAULT;
- types = arguments[0];
- break;
+ } else if (Array.isArray(definition)) {
+ // Schema.extend([ type1, type2, ... ])
+ explicit = explicit.concat(definition);
- case 2:
- schemas = arguments[0];
- types = arguments[1];
- break;
+ } 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);
- default:
- throw new YAMLException$4('Wrong number of arguments for Schema.create function');
+ } else {
+ throw new exception('Schema.extend argument should be a Type, [ Type ], ' +
+ 'or a schema definition ({ implicit: [...], explicit: [...] })');
}
- schemas = common$9.toArray(schemas);
- types = common$9.toArray(types);
+ 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.');
+ }
- 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 (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.');
+ }
- 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.');
- }
+ 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.');
+ }
+ });
- return new Schema$7({
- include: schemas,
- explicit: types
+ 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.');
+ }
});
-};
+ var result = Object.create(Schema$1.prototype);
+
+ result.implicit = (this.implicit || []).concat(implicit);
+ result.explicit = (this.explicit || []).concat(explicit);
+
+ result.compiledImplicit = compileList(result, 'implicit');
+ result.compiledExplicit = compileList(result, 'explicit');
+ result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);
+
+ return result;
+};
-var schema$2 = Schema$7;
-var Type$h = type$1;
+var schema$1 = Schema$1;
-var str$1 = new Type$h('tag:yaml.org,2002:str', {
+var str = new type$1('tag:yaml.org,2002:str', {
kind: 'scalar',
construct: function (data) { return data !== null ? data : ''; }
});
-var Type$g = type$1;
-
-var seq$1 = new Type$g('tag:yaml.org,2002:seq', {
+var seq = new type$1('tag:yaml.org,2002:seq', {
kind: 'sequence',
construct: function (data) { return data !== null ? data : []; }
});
-var Type$f = type$1;
-
-var map$7 = new Type$f('tag:yaml.org,2002:map', {
+var map$3 = new type$1('tag:yaml.org,2002:map', {
kind: 'mapping',
construct: function (data) { return data !== null ? data : {}; }
});
-var Schema$6 = schema$2;
-
-
-var failsafe$1 = new Schema$6({
+var failsafe = new schema$1({
explicit: [
- str$1,
- seq$1,
- map$7
+ str,
+ seq,
+ map$3
]
});
-var Type$e = type$1;
-
-function resolveYamlNull$1(data) {
+function resolveYamlNull(data) {
if (data === null) return true;
var max = data.length;
@@ -641,31 +9047,30 @@ 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$e('tag:yaml.org,2002:null', {
+var _null = new type$1('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'; },
uppercase: function () { return 'NULL'; },
- camelcase: function () { return 'Null'; }
+ camelcase: function () { return 'Null'; },
+ empty: function () { return ''; }
},
defaultStyle: 'lowercase'
});
-var Type$d = type$1;
-
-function resolveYamlBoolean$1(data) {
+function resolveYamlBoolean(data) {
if (data === null) return false;
var max = data.length;
@@ -674,21 +9079,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$d('tag:yaml.org,2002:bool', {
+var bool = new type$1('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'; },
@@ -697,24 +9102,21 @@ var bool$1 = new Type$d('tag:yaml.org,2002:bool', {
defaultStyle: 'lowercase'
});
-var common$8 = common$b;
-var Type$c = type$1;
-
-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,
@@ -759,23 +9161,28 @@ 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 !== '_';
}
- // base 8
- for (; index < max; index++) {
- ch = data[index];
- if (ch === '_') continue;
- if (!isOctCode$1(data.charCodeAt(index))) return false;
- hasDigits = true;
+
+ if (ch === 'o') {
+ // base 8
+ index++;
+
+ for (; index < max; index++) {
+ ch = data[index];
+ if (ch === '_') continue;
+ if (!isOctCode(data.charCodeAt(index))) return false;
+ hasDigits = true;
+ }
+ return hasDigits && ch !== '_';
}
- return hasDigits && ch !== '_';
}
- // base 10 (except 0) or base 60
+ // base 10 (except 0)
// value should not start with `_`;
if (ch === '_') return false;
@@ -783,8 +9190,7 @@ function resolveYamlInteger$1(data) {
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
- if (ch === ':') break;
- if (!isDecCode$1(data.charCodeAt(index))) {
+ if (!isDecCode(data.charCodeAt(index))) {
return false;
}
hasDigits = true;
@@ -793,15 +9199,11 @@ function resolveYamlInteger$1(data) {
// Should have digits and should not end with `_`
if (!hasDigits || ch === '_') return false;
- // if !base60 - done;
- if (ch !== ':') return true;
-
- // base60 almost not used, no needs to optimize
- return /^(:[0-5]?[0-9])+$/.test(data.slice(index));
+ return true;
}
-function constructYamlInteger$1(data) {
- var value = data, sign = 1, ch, base, digits = [];
+function constructYamlInteger(data) {
+ var value = data, sign = 1, ch;
if (value.indexOf('_') !== -1) {
value = value.replace(/_/g, '');
@@ -819,43 +9221,26 @@ function constructYamlInteger$1(data) {
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);
- }
-
- if (value.indexOf(':') !== -1) {
- value.split(':').forEach(function (v) {
- digits.unshift(parseInt(v, 10));
- });
-
- value = 0;
- base = 1;
-
- digits.forEach(function (d) {
- value += (d * base);
- base *= 60;
- });
-
- return sign * value;
-
+ if (value[1] === 'x') return sign * parseInt(value.slice(2), 16);
+ if (value[1] === 'o') return sign * parseInt(value.slice(2), 8);
}
return sign * parseInt(value, 10);
}
-function isInteger$1(object) {
+function isInteger(object) {
return (Object.prototype.toString.call(object)) === '[object Number]' &&
- (object % 1 === 0 && !common$8.isNegativeZero(object));
+ (object % 1 === 0 && !common$4.isNegativeZero(object));
}
-var int$4 = new Type$c('tag:yaml.org,2002:int', {
+var int = new type$1('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 ? '0' + obj.toString(8) : '-0' + obj.toString(8).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); }
@@ -869,26 +9254,21 @@ var int$4 = new Type$c('tag:yaml.org,2002:int', {
}
});
-var common$7 = common$b;
-var Type$b = type$1;
-
-var YAML_FLOAT_PATTERN$1 = new RegExp(
+var YAML_FLOAT_PATTERN = new RegExp(
// 2.5e4, 2.5 and integers
- '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +
+ '^(?:[-+]?(?:[0-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))$');
-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] === '_') {
@@ -898,12 +9278,11 @@ function resolveYamlFloat$1(data) {
return true;
}
-function constructYamlFloat$1(data) {
- var value, sign, base, digits;
+function constructYamlFloat(data) {
+ var value, sign;
value = data.replace(/_/g, '').toLowerCase();
sign = value[0] === '-' ? -1 : 1;
- digits = [];
if ('+-'.indexOf(value[0]) >= 0) {
value = value.slice(1);
@@ -914,30 +9293,14 @@ function constructYamlFloat$1(data) {
} else if (value === '.nan') {
return NaN;
-
- } else if (value.indexOf(':') >= 0) {
- value.split(':').forEach(function (v) {
- digits.unshift(parseFloat(v, 10));
- });
-
- value = 0.0;
- base = 1;
-
- digits.forEach(function (d) {
- value += d * base;
- base *= 60;
- });
-
- return sign * value;
-
}
return sign * parseFloat(value, 10);
}
-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)) {
@@ -958,7 +9321,7 @@ function representYamlFloat$1(object, style) {
case 'uppercase': return '-.INF';
case 'camelcase': return '-.Inf';
}
- } else if (common$7.isNegativeZero(object)) {
+ } else if (common$4.isNegativeZero(object)) {
return '-0.0';
}
@@ -967,55 +9330,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$7.isNegativeZero(object));
+ (object % 1 !== 0 || common$4.isNegativeZero(object));
}
-var float$1 = new Type$b('tag:yaml.org,2002:float', {
+var float = new type$1('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 Schema$5 = schema$2;
-
-
-var json$3 = new Schema$5({
- include: [
- failsafe$1
- ],
+var json = failsafe.extend({
implicit: [
- _null$1,
- bool$1,
- int$4,
- float$1
- ]
-});
-
-var Schema$4 = schema$2;
-
-
-var core$4 = new Schema$4({
- include: [
- json$3
+ _null,
+ bool,
+ int,
+ float
]
});
-var Type$a = type$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
@@ -1027,19 +9375,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');
@@ -1083,50 +9431,41 @@ function constructYamlTimestamp$1(data) {
return date;
}
-function representYamlTimestamp$1(object /*, style*/) {
+function representYamlTimestamp(object /*, style*/) {
return object.toISOString();
}
-var timestamp$1 = new Type$a('tag:yaml.org,2002:timestamp', {
+var timestamp = new type$1('tag:yaml.org,2002:timestamp', {
kind: 'scalar',
- resolve: resolveYamlTimestamp$1,
- construct: constructYamlTimestamp$1,
+ resolve: resolveYamlTimestamp,
+ construct: constructYamlTimestamp,
instanceOf: Date,
- represent: representYamlTimestamp$1
+ represent: representYamlTimestamp
});
-var Type$9 = type$1;
-
-function resolveYamlMerge$1(data) {
+function resolveYamlMerge(data) {
return data === '<<' || data === null;
}
-var merge$2 = new Type$9('tag:yaml.org,2002:merge', {
+var merge$1 = new type$1('tag:yaml.org,2002:merge', {
kind: 'scalar',
- resolve: resolveYamlMerge$1
+ resolve: resolveYamlMerge
});
/*eslint-disable no-bitwise*/
-var NodeBuffer;
-try {
- // A trick for browserified version, to not include `Buffer` shim
- var _require$1 = commonjsRequire;
- NodeBuffer = _require$1('buffer').Buffer;
-} catch (__) {}
-var Type$8 = type$1;
// [ 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++) {
@@ -1145,11 +9484,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 = [];
@@ -1180,19 +9519,13 @@ function constructYamlBinary$1(data) {
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);
- }
-
- return result;
+ 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.
@@ -1231,24 +9564,22 @@ function representYamlBinary$1(object /*, style*/) {
return result;
}
-function isBinary$1(object) {
- return NodeBuffer && NodeBuffer.isBuffer(object);
+function isBinary(obj) {
+ return Object.prototype.toString.call(obj) === '[object Uint8Array]';
}
-var binary$1 = new Type$8('tag:yaml.org,2002:binary', {
+var binary = new type$1('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 Type$7 = type$1;
-
-var _hasOwnProperty$7 = Object.prototype.hasOwnProperty;
-var _toString$5 = 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,
@@ -1258,10 +9589,10 @@ function resolveYamlOmap$1(data) {
pair = object[index];
pairHasKey = false;
- if (_toString$5.call(pair) !== '[object Object]') return false;
+ if (_toString$2.call(pair) !== '[object Object]') return false;
for (pairKey in pair) {
- if (_hasOwnProperty$7.call(pair, pairKey)) {
+ if (_hasOwnProperty$3.call(pair, pairKey)) {
if (!pairHasKey) pairHasKey = true;
else return false;
}
@@ -1276,21 +9607,19 @@ function resolveYamlOmap$1(data) {
return true;
}
-function constructYamlOmap$1(data) {
+function constructYamlOmap(data) {
return data !== null ? data : [];
}
-var omap$1 = new Type$7('tag:yaml.org,2002:omap', {
+var omap = new type$1('tag:yaml.org,2002:omap', {
kind: 'sequence',
- resolve: resolveYamlOmap$1,
- construct: constructYamlOmap$1
+ resolve: resolveYamlOmap,
+ construct: constructYamlOmap
});
-var Type$6 = type$1;
-
-var _toString$4 = 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,
@@ -1301,7 +9630,7 @@ function resolveYamlPairs$1(data) {
for (index = 0, length = object.length; index < length; index += 1) {
pair = object[index];
- if (_toString$4.call(pair) !== '[object Object]') return false;
+ if (_toString$1.call(pair) !== '[object Object]') return false;
keys = Object.keys(pair);
@@ -1313,7 +9642,7 @@ function resolveYamlPairs$1(data) {
return true;
}
-function constructYamlPairs$1(data) {
+function constructYamlPairs(data) {
if (data === null) return [];
var index, length, pair, keys, result,
@@ -1332,23 +9661,21 @@ function constructYamlPairs$1(data) {
return result;
}
-var pairs$1 = new Type$6('tag:yaml.org,2002:pairs', {
+var pairs = new type$1('tag:yaml.org,2002:pairs', {
kind: 'sequence',
- resolve: resolveYamlPairs$1,
- construct: constructYamlPairs$1
+ resolve: resolveYamlPairs,
+ construct: constructYamlPairs
});
-var Type$5 = type$1;
-
-var _hasOwnProperty$6 = 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$6.call(object, key)) {
+ if (_hasOwnProperty$2.call(object, key)) {
if (object[key] !== null) return false;
}
}
@@ -1356,275 +9683,76 @@ function resolveYamlSet$1(data) {
return true;
}
-function constructYamlSet$1(data) {
+function constructYamlSet(data) {
return data !== null ? data : {};
}
-var set$1 = new Type$5('tag:yaml.org,2002:set', {
+var set = new type$1('tag:yaml.org,2002:set', {
kind: 'mapping',
- resolve: resolveYamlSet$1,
- construct: constructYamlSet$1
+ resolve: resolveYamlSet,
+ construct: constructYamlSet
});
-var Schema$3 = schema$2;
-
-
-var default_safe = new Schema$3({
- include: [
- core$4
- ],
+var _default$1 = core.extend({
implicit: [
- timestamp$1,
- merge$2
+ timestamp,
+ merge$1
],
explicit: [
- binary$1,
- omap$1,
- pairs$1,
- set$1
+ binary,
+ omap,
+ pairs,
+ set
]
});
-var Type$4 = type$1;
-
-function resolveJavascriptUndefined() {
- return true;
-}
-
-function constructJavascriptUndefined() {
- /*eslint-disable no-undefined*/
- return undefined;
-}
-
-function representJavascriptUndefined() {
- return '';
-}
-
-function isUndefined(object) {
- return typeof object === 'undefined';
-}
-
-var _undefined = new Type$4('tag:yaml.org,2002:js/undefined', {
- kind: 'scalar',
- resolve: resolveJavascriptUndefined,
- construct: constructJavascriptUndefined,
- predicate: isUndefined,
- represent: representJavascriptUndefined
-});
-
-var Type$3 = type$1;
-
-function resolveJavascriptRegExp(data) {
- if (data === null) return false;
- if (data.length === 0) return false;
-
- var regexp = data,
- tail = /\/([gim]*)$/.exec(data),
- modifiers = '';
-
- // 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];
-
- if (modifiers.length > 3) return false;
- // if expression starts with /, is should be properly terminated
- if (regexp[regexp.length - modifiers.length - 1] !== '/') return false;
- }
-
- return true;
-}
-
-function constructJavascriptRegExp(data) {
- var regexp = data,
- tail = /\/([gim]*)$/.exec(data),
- modifiers = '';
-
- // `/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);
- }
-
- return new RegExp(regexp, modifiers);
-}
-
-function representJavascriptRegExp(object /*, style*/) {
- var result = '/' + object.source + '/';
-
- if (object.global) result += 'g';
- if (object.multiline) result += 'm';
- if (object.ignoreCase) result += 'i';
-
- return result;
-}
-
-function isRegExp(object) {
- return Object.prototype.toString.call(object) === '[object RegExp]';
-}
-
-var regexp = new Type$3('tag:yaml.org,2002:js/regexp', {
- kind: 'scalar',
- resolve: resolveJavascriptRegExp,
- construct: constructJavascriptRegExp,
- predicate: isRegExp,
- represent: representJavascriptRegExp
-});
-
-var esprima;
-
-// 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;
-}
-
-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;
- }
-}
-
-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;
-
- // 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]));
-}
-
-function representJavascriptFunction(object /*, style*/) {
- return object.toString();
-}
-
-function isFunction(object) {
- return Object.prototype.toString.call(object) === '[object Function]';
-}
-
-var _function = new Type$2('tag:yaml.org,2002:js/function', {
- kind: 'scalar',
- resolve: resolveJavascriptFunction,
- construct: constructJavascriptFunction,
- predicate: isFunction,
- represent: representJavascriptFunction
-});
+/*eslint-disable max-len,no-use-before-define*/
-var Schema$2 = schema$2;
-var default_full = Schema$2.DEFAULT = new Schema$2({
- include: [
- default_safe
- ],
- explicit: [
- _undefined,
- regexp,
- _function
- ]
-});
-/*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 _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/* ] */ ||
@@ -1632,7 +9760,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 */)) {
@@ -1649,14 +9777,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;
}
@@ -1664,7 +9792,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' :
@@ -1686,7 +9814,7 @@ function simpleEscapeSequence$1(c) {
(c === 0x50/* P */) ? '\u2029' : '';
}
-function charFromCodepoint$1(c) {
+function charFromCodepoint(c) {
if (c <= 0xFFFF) {
return String.fromCharCode(c);
}
@@ -1698,21 +9826,24 @@ 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$3(input, options) {
+function State$1(input, options) {
this.input = input;
this.filename = options['filename'] || null;
- this.schema = options['schema'] || DEFAULT_FULL_SCHEMA$1;
+ 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.json = options['json'] || false;
this.listener = options['listener'] || null;
@@ -1725,6 +9856,10 @@ function State$3(input, options) {
this.lineStart = 0;
this.lineIndent = 0;
+ // position of first leading tab in the current line,
+ // used to make sure there are no tabs in the indentation
+ this.firstTabInLine = -1;
+
this.documents = [];
/*
@@ -1740,55 +9875,63 @@ function State$3(input, options) {
}
-function generateError$1(state, message) {
- return new YAMLException$3(
- message,
- new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart)));
+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
+ };
+
+ mark.snippet = snippet(mark);
+
+ return new exception(message, mark);
}
-function throwError$2(state, message) {
- throw generateError$1(state, message);
+function throwError$1(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$1(state, 'duplication of %YAML directive');
}
if (args.length !== 1) {
- throwError$2(state, 'YAML directive accepts exactly one argument');
+ throwError$1(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$1(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$1(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');
}
},
@@ -1797,22 +9940,28 @@ var directiveHandlers$1 = {
var handle, prefix;
if (args.length !== 2) {
- throwError$2(state, 'TAG directive accepts exactly two arguments');
+ throwError$1(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$1(state, 'ill-formed tag handle (first argument) of the TAG directive');
}
- if (_hasOwnProperty$5.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$1(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$1(state, 'ill-formed tag prefix (second argument) of the TAG directive');
+ }
+
+ try {
+ prefix = decodeURIComponent(prefix);
+ } catch (err) {
+ throwError$1(state, 'tag prefix is malformed: ' + prefix);
}
state.tagMap[handle] = prefix;
@@ -1820,7 +9969,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) {
@@ -1831,22 +9980,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$1(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$1(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$6.isObject(source)) {
- throwError$2(state, 'cannot merge mappings; the provided source object is unacceptable');
+ if (!common$4.isObject(source)) {
+ throwError$1(state, 'cannot merge mappings; the provided source object is unacceptable');
}
sourceKeys = Object.keys(source);
@@ -1854,14 +10003,16 @@ function mergeMappings$1(state, destination, source, overridableKeys) {
for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
key = sourceKeys[index];
- if (!_hasOwnProperty$5.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, startLine, startPos) {
+function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,
+ startLine, startLineStart, startPos) {
+
var index, quantity;
// The output is a plain object here, so keys can only be strings.
@@ -1872,10 +10023,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$1(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]';
}
}
@@ -1884,7 +10035,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]';
}
@@ -1898,27 +10049,39 @@ 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$5.call(overridableKeys, keyNode) &&
- _hasOwnProperty$5.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$1(state, 'duplicated mapping key');
+ }
+
+ // 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;
}
- _result[keyNode] = valueNode;
delete overridableKeys[keyNode];
}
return _result;
}
-function readLineBreak$1(state) {
+function readLineBreak(state) {
var ch;
ch = state.input.charCodeAt(state.position);
@@ -1931,19 +10094,23 @@ function readLineBreak$1(state) {
state.position++;
}
} else {
- throwError$2(state, 'a line break is expected');
+ throwError$1(state, 'a line break is expected');
}
state.line += 1;
state.lineStart = state.position;
+ 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;
+ }
ch = state.input.charCodeAt(++state.position);
}
@@ -1953,8 +10120,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++;
@@ -1970,13 +10137,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;
@@ -1992,7 +10159,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;
}
}
@@ -2000,16 +10167,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$6.repeat('\n', count - 1);
+ state.result += common$4.repeat('\n', count - 1);
}
}
-function readPlainScalar$1(state, nodeIndent, withinFlowCollection) {
+function readPlainScalar(state, nodeIndent, withinFlowCollection) {
var preceding,
following,
captureStart,
@@ -2024,8 +10191,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/* * */ ||
@@ -2043,8 +10210,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;
}
}
@@ -2058,27 +10225,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;
@@ -2094,20 +10261,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;
@@ -2118,7 +10285,7 @@ function readPlainScalar$1(state, nodeIndent, withinFlowCollection) {
return false;
}
-function readSingleQuotedScalar$1(state, nodeIndent) {
+function readSingleQuotedScalar(state, nodeIndent) {
var ch,
captureStart, captureEnd;
@@ -2135,7 +10302,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/* ' */) {
@@ -2146,13 +10313,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$1(state, 'unexpected end of the document within a single quoted scalar');
} else {
state.position++;
@@ -2160,10 +10327,10 @@ function readSingleQuotedScalar$1(state, nodeIndent) {
}
}
- throwError$2(state, 'unexpected end of the stream within a single quoted scalar');
+ throwError$1(state, 'unexpected end of the stream within a single quoted scalar');
}
-function readDoubleQuotedScalar$1(state, nodeIndent) {
+function readDoubleQuotedScalar(state, nodeIndent) {
var captureStart,
captureEnd,
hexLength,
@@ -2184,54 +10351,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$1(state, 'expected hexadecimal character');
}
}
- state.result += charFromCodepoint$1(hexResult);
+ state.result += charFromCodepoint(hexResult);
state.position++;
} else {
- throwError$2(state, 'unknown escape sequence');
+ throwError$1(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$1(state, 'unexpected end of the document within a double quoted scalar');
} else {
state.position++;
@@ -2239,12 +10406,14 @@ function readDoubleQuotedScalar$1(state, nodeIndent) {
}
}
- throwError$2(state, 'unexpected end of the stream within a double quoted scalar');
+ throwError$1(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,
+ _pos,
_tag = state.tag,
_result,
_anchor = state.anchor,
@@ -2253,7 +10422,7 @@ function readFlowCollection$1(state, nodeIndent) {
isPair,
isExplicitPair,
isMapping,
- overridableKeys = {},
+ overridableKeys = Object.create(null),
keyNode,
keyTag,
valueNode,
@@ -2280,7 +10449,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);
@@ -2292,7 +10461,10 @@ function readFlowCollection$1(state, nodeIndent) {
state.result = _result;
return true;
} else if (!readNext) {
- throwError$2(state, 'missed comma between flow collection entries');
+ 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 ','");
}
keyTag = keyNode = valueNode = null;
@@ -2301,38 +10473,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;
- composeNode$1(state, nodeIndent, CONTEXT_FLOW_IN$1, false, true);
+ _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$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);
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);
} else if (isPair) {
- _result.push(storeMappingPair$1(state, null, overridableKeys, keyTag, keyNode, valueNode));
+ _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);
@@ -2344,13 +10518,13 @@ function readFlowCollection$1(state, nodeIndent) {
}
}
- throwError$2(state, 'unexpected end of the stream within a flow collection');
+ throwError$1(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,
@@ -2376,20 +10550,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$1(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$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$2(state, 'repeat of an indentation width identifier');
+ throwError$1(state, 'repeat of an indentation width identifier');
}
} else {
@@ -2397,18 +10571,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);
@@ -2423,7 +10597,7 @@ function readBlockScalar$1(state, nodeIndent) {
textIndent = state.lineIndent;
}
- if (is_EOL$1(ch)) {
+ if (is_EOL(ch)) {
emptyLines++;
continue;
}
@@ -2432,9 +10606,9 @@ function readBlockScalar$1(state, nodeIndent) {
if (state.lineIndent < textIndent) {
// 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 (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';
}
@@ -2448,15 +10622,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$6.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
+ state.result += common$4.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
// End of more-indented block.
} else if (atMoreIndented) {
atMoreIndented = false;
- state.result += common$6.repeat('\n', emptyLines + 1);
+ state.result += common$4.repeat('\n', emptyLines + 1);
// Just one line break - perceive as the same line.
} else if (emptyLines === 0) {
@@ -2466,13 +10640,13 @@ function readBlockScalar$1(state, nodeIndent) {
// Several line breaks - perceive as different lines.
} else {
- state.result += common$6.repeat('\n', emptyLines);
+ state.result += common$4.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$6.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
+ state.result += common$4.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
}
didReadContent = true;
@@ -2480,17 +10654,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,
@@ -2499,6 +10673,10 @@ function readBlockSequence$1(state, nodeIndent) {
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;
}
@@ -2506,6 +10684,10 @@ function readBlockSequence$1(state, nodeIndent) {
ch = state.input.charCodeAt(state.position);
while (ch !== 0) {
+ if (state.firstTabInLine !== -1) {
+ state.position = state.firstTabInLine;
+ throwError$1(state, 'tab characters must not be used in indentation');
+ }
if (ch !== 0x2D/* - */) {
break;
@@ -2513,14 +10695,14 @@ function readBlockSequence$1(state, nodeIndent) {
following = state.input.charCodeAt(state.position + 1);
- if (!is_WS_OR_EOL$1(following)) {
+ if (!is_WS_OR_EOL(following)) {
break;
}
detected = true;
state.position++;
- if (skipSeparationSpace$1(state, true, -1)) {
+ if (skipSeparationSpace(state, true, -1)) {
if (state.lineIndent <= nodeIndent) {
_result.push(null);
ch = state.input.charCodeAt(state.position);
@@ -2529,14 +10711,14 @@ function readBlockSequence$1(state, nodeIndent) {
}
_line = state.line;
- composeNode$1(state, nodeIndent, CONTEXT_BLOCK_IN$1, false, true);
+ composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);
_result.push(state.result);
- skipSeparationSpace$1(state, true, -1);
+ skipSeparationSpace(state, true, -1);
ch = state.input.charCodeAt(state.position);
if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {
- throwError$2(state, 'bad indentation of a sequence entry');
+ throwError$1(state, 'bad indentation of a sequence entry');
} else if (state.lineIndent < nodeIndent) {
break;
}
@@ -2552,15 +10734,17 @@ function readBlockSequence$1(state, nodeIndent) {
return false;
}
-function readBlockMapping$1(state, nodeIndent, flowIndent) {
+function readBlockMapping(state, nodeIndent, flowIndent) {
var following,
allowCompact,
_line,
- _pos,
+ _keyLine,
+ _keyLineStart,
+ _keyPos,
_tag = state.tag,
_anchor = state.anchor,
_result = {},
- overridableKeys = {},
+ overridableKeys = Object.create(null),
keyTag = null,
keyNode = null,
valueNode = null,
@@ -2568,6 +10752,10 @@ function readBlockMapping$1(state, nodeIndent, flowIndent) {
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;
}
@@ -2575,19 +10763,23 @@ function readBlockMapping$1(state, nodeIndent, flowIndent) {
ch = state.input.charCodeAt(state.position);
while (ch !== 0) {
+ if (!atExplicitKey && state.firstTabInLine !== -1) {
+ state.position = state.firstTabInLine;
+ throwError$1(state, 'tab characters must not be used in indentation');
+ }
+
following = state.input.charCodeAt(state.position + 1);
_line = state.line; // Save the current line.
- _pos = 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)) {
+ if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {
if (ch === 0x3F/* ? */) {
if (atExplicitKey) {
- storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null);
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
keyTag = keyNode = valueNode = null;
}
@@ -2601,7 +10793,7 @@ function readBlockMapping$1(state, nodeIndent, flowIndent) {
allowCompact = true;
} else {
- throwError$2(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');
+ throwError$1(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');
}
state.position += 1;
@@ -2610,24 +10802,33 @@ function readBlockMapping$1(state, nodeIndent, flowIndent) {
//
// 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)) {
+ } 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$1(ch)) {
+ 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$1(ch)) {
- throwError$2(state, 'a whitespace character is expected after the key-value separator within a block mapping');
+ if (!is_WS_OR_EOL(ch)) {
+ throwError$1(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);
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
keyTag = keyNode = valueNode = null;
}
@@ -2638,7 +10839,7 @@ function readBlockMapping$1(state, nodeIndent, flowIndent) {
keyNode = state.result;
} else if (detected) {
- throwError$2(state, 'can not read an implicit mapping pair; a colon is missed');
+ throwError$1(state, 'can not read an implicit mapping pair; a colon is missed');
} else {
state.tag = _tag;
@@ -2647,23 +10848,26 @@ function readBlockMapping$1(state, nodeIndent, flowIndent) {
}
} else if (detected) {
- throwError$2(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');
+ throwError$1(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`.
}
-
- } else {
- break; // Reading is done. Go to the epilogue.
}
//
// 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) {
+ _keyLine = state.line;
+ _keyLineStart = state.lineStart;
+ _keyPos = state.position;
+ }
+
+ if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {
if (atExplicitKey) {
keyNode = state.result;
} else {
@@ -2672,16 +10876,16 @@ function readBlockMapping$1(state, nodeIndent, flowIndent) {
}
if (!atExplicitKey) {
- storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos);
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);
keyTag = keyNode = valueNode = null;
}
- skipSeparationSpace$1(state, true, -1);
+ skipSeparationSpace(state, true, -1);
ch = state.input.charCodeAt(state.position);
}
- if (state.lineIndent > nodeIndent && (ch !== 0)) {
- throwError$2(state, 'bad indentation of a mapping entry');
+ if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {
+ throwError$1(state, 'bad indentation of a mapping entry');
} else if (state.lineIndent < nodeIndent) {
break;
}
@@ -2693,7 +10897,7 @@ function readBlockMapping$1(state, nodeIndent, flowIndent) {
// Special case: last mapping's node contains only the key in explicit notation.
if (atExplicitKey) {
- storeMappingPair$1(state, _result, overridableKeys, keyTag, keyNode, null);
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
}
// Expose the resulting mapping.
@@ -2707,7 +10911,7 @@ function readBlockMapping$1(state, nodeIndent, flowIndent) {
return detected;
}
-function readTagProperty$1(state) {
+function readTagProperty(state) {
var _position,
isVerbatim = false,
isNamed = false,
@@ -2720,7 +10924,7 @@ function readTagProperty$1(state) {
if (ch !== 0x21/* ! */) return false;
if (state.tag !== null) {
- throwError$2(state, 'duplication of a tag property');
+ throwError$1(state, 'duplication of a tag property');
}
ch = state.input.charCodeAt(++state.position);
@@ -2748,23 +10952,23 @@ function readTagProperty$1(state) {
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');
+ throwError$1(state, 'unexpected end of the stream within a verbatim tag');
}
} else {
- while (ch !== 0 && !is_WS_OR_EOL$1(ch)) {
+ 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$1.test(tagHandle)) {
- throwError$2(state, 'named tag handle cannot contain such characters');
+ if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
+ throwError$1(state, 'named tag handle cannot contain such characters');
}
isNamed = true;
_position = state.position + 1;
} else {
- throwError$2(state, 'tag suffix cannot contain exclamation marks');
+ throwError$1(state, 'tag suffix cannot contain exclamation marks');
}
}
@@ -2773,19 +10977,25 @@ function readTagProperty$1(state) {
tagName = state.input.slice(_position, state.position);
- if (PATTERN_FLOW_INDICATORS$1.test(tagName)) {
- throwError$2(state, 'tag suffix cannot contain flow indicator characters');
+ if (PATTERN_FLOW_INDICATORS.test(tagName)) {
+ throwError$1(state, 'tag suffix cannot contain flow indicator characters');
}
}
- if (tagName && !PATTERN_TAG_URI$1.test(tagName)) {
- throwError$2(state, 'tag name cannot contain such characters: ' + tagName);
+ if (tagName && !PATTERN_TAG_URI.test(tagName)) {
+ throwError$1(state, 'tag name cannot contain such characters: ' + tagName);
+ }
+
+ try {
+ tagName = decodeURIComponent(tagName);
+ } catch (err) {
+ throwError$1(state, 'tag name is malformed: ' + tagName);
}
if (isVerbatim) {
state.tag = tagName;
- } else if (_hasOwnProperty$5.call(state.tagMap, tagHandle)) {
+ } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {
state.tag = state.tagMap[tagHandle] + tagName;
} else if (tagHandle === '!') {
@@ -2795,13 +11005,13 @@ function readTagProperty$1(state) {
state.tag = 'tag:yaml.org,2002:' + tagName;
} else {
- throwError$2(state, 'undeclared tag handle "' + tagHandle + '"');
+ throwError$1(state, 'undeclared tag handle "' + tagHandle + '"');
}
return true;
}
-function readAnchorProperty$1(state) {
+function readAnchorProperty(state) {
var _position,
ch;
@@ -2810,25 +11020,25 @@ function readAnchorProperty$1(state) {
if (ch !== 0x26/* & */) return false;
if (state.anchor !== null) {
- throwError$2(state, 'duplication of an anchor property');
+ throwError$1(state, 'duplication of an anchor property');
}
ch = state.input.charCodeAt(++state.position);
_position = state.position;
- while (ch !== 0 && !is_WS_OR_EOL$1(ch) && !is_FLOW_INDICATOR$1(ch)) {
+ while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
ch = state.input.charCodeAt(++state.position);
}
if (state.position === _position) {
- throwError$2(state, 'name of an anchor node must contain at least one character');
+ throwError$1(state, 'name of an anchor node must contain at least one character');
}
state.anchor = state.input.slice(_position, state.position);
return true;
}
-function readAlias$1(state) {
+function readAlias(state) {
var _position, alias,
ch;
@@ -2839,26 +11049,26 @@ function readAlias$1(state) {
ch = state.input.charCodeAt(++state.position);
_position = state.position;
- while (ch !== 0 && !is_WS_OR_EOL$1(ch) && !is_FLOW_INDICATOR$1(ch)) {
+ while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
ch = state.input.charCodeAt(++state.position);
}
if (state.position === _position) {
- throwError$2(state, 'name of an alias node must contain at least one character');
+ throwError$1(state, 'name of an alias node must contain at least one character');
}
alias = state.input.slice(_position, state.position);
- if (!_hasOwnProperty$5.call(state.anchorMap, alias)) {
- throwError$2(state, 'unidentified alias "' + alias + '"');
+ if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {
+ throwError$1(state, 'unidentified alias "' + alias + '"');
}
state.result = state.anchorMap[alias];
- skipSeparationSpace$1(state, true, -1);
+ skipSeparationSpace(state, true, -1);
return true;
}
-function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
+function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
var allowBlockStyles,
allowBlockScalars,
allowBlockCollections,
@@ -2867,6 +11077,7 @@ function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompa
hasContent = false,
typeIndex,
typeQuantity,
+ typeList,
type,
flowIndent,
blockIndent;
@@ -2881,11 +11092,11 @@ function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompa
state.result = null;
allowBlockStyles = allowBlockScalars = allowBlockCollections =
- CONTEXT_BLOCK_OUT$1 === nodeContext ||
- CONTEXT_BLOCK_IN$1 === nodeContext;
+ CONTEXT_BLOCK_OUT === nodeContext ||
+ CONTEXT_BLOCK_IN === nodeContext;
if (allowToSeek) {
- if (skipSeparationSpace$1(state, true, -1)) {
+ if (skipSeparationSpace(state, true, -1)) {
atNewLine = true;
if (state.lineIndent > parentIndent) {
@@ -2899,8 +11110,8 @@ function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompa
}
if (indentStatus === 1) {
- while (readTagProperty$1(state) || readAnchorProperty$1(state)) {
- if (skipSeparationSpace$1(state, true, -1)) {
+ while (readTagProperty(state) || readAnchorProperty(state)) {
+ if (skipSeparationSpace(state, true, -1)) {
atNewLine = true;
allowBlockCollections = allowBlockStyles;
@@ -2921,8 +11132,8 @@ function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompa
allowBlockCollections = atNewLine || allowCompact;
}
- if (indentStatus === 1 || CONTEXT_BLOCK_OUT$1 === nodeContext) {
- if (CONTEXT_FLOW_IN$1 === nodeContext || CONTEXT_FLOW_OUT$1 === nodeContext) {
+ if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
+ if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {
flowIndent = parentIndent;
} else {
flowIndent = parentIndent + 1;
@@ -2932,24 +11143,24 @@ function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompa
if (indentStatus === 1) {
if (allowBlockCollections &&
- (readBlockSequence$1(state, blockIndent) ||
- readBlockMapping$1(state, blockIndent, flowIndent)) ||
- readFlowCollection$1(state, flowIndent)) {
+ (readBlockSequence(state, blockIndent) ||
+ readBlockMapping(state, blockIndent, flowIndent)) ||
+ readFlowCollection(state, flowIndent)) {
hasContent = true;
} else {
- if ((allowBlockScalars && readBlockScalar$1(state, flowIndent)) ||
- readSingleQuotedScalar$1(state, flowIndent) ||
- readDoubleQuotedScalar$1(state, flowIndent)) {
+ if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||
+ readSingleQuotedScalar(state, flowIndent) ||
+ readDoubleQuotedScalar(state, flowIndent)) {
hasContent = true;
- } else if (readAlias$1(state)) {
+ } else if (readAlias(state)) {
hasContent = true;
if (state.tag !== null || state.anchor !== null) {
- throwError$2(state, 'alias node should not have any properties');
+ throwError$1(state, 'alias node should not have any properties');
}
- } else if (readPlainScalar$1(state, flowIndent, CONTEXT_FLOW_IN$1 === nodeContext)) {
+ } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
hasContent = true;
if (state.tag === null) {
@@ -2964,51 +11175,69 @@ function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompa
} 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);
+ hasContent = allowBlockCollections && readBlockSequence(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 + '"');
- }
-
- for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
- type = state.implicitTypes[typeIndex];
+ if (state.tag === null) {
+ if (state.anchor !== null) {
+ state.anchorMap[state.anchor] = state.result;
+ }
- 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 (_hasOwnProperty$5.call(state.typeMap[state.kind || 'fallback'], state.tag)) {
- type = state.typeMap[state.kind || 'fallback'][state.tag];
+ } 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 + '"');
+ }
- 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 + '"');
- }
+ 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
- throwError$2(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');
- } else {
+ 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'];
+
+ 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;
+ }
}
+ }
+
+ if (!type) {
+ throwError$1(state, 'unknown tag !<' + state.tag + '>');
+ }
+
+ 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 + '"');
+ }
+
+ 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 {
- throwError$2(state, 'unknown tag !<' + state.tag + '>');
+ state.result = type.construct(state.result, state.tag);
+ if (state.anchor !== null) {
+ state.anchorMap[state.anchor] = state.result;
+ }
}
}
@@ -3018,7 +11247,7 @@ function composeNode$1(state, parentIndent, nodeContext, allowToSeek, allowCompa
return state.tag !== null || state.anchor !== null || hasContent;
}
-function readDocument$1(state) {
+function readDocument(state) {
var documentStart = state.position,
_position,
directiveName,
@@ -3028,11 +11257,11 @@ function readDocument$1(state) {
state.version = null;
state.checkLineBreaks = state.legacy;
- state.tagMap = {};
- state.anchorMap = {};
+ state.tagMap = Object.create(null);
+ state.anchorMap = Object.create(null);
while ((ch = state.input.charCodeAt(state.position)) !== 0) {
- skipSeparationSpace$1(state, true, -1);
+ skipSeparationSpace(state, true, -1);
ch = state.input.charCodeAt(state.position);
@@ -3044,7 +11273,7 @@ function readDocument$1(state) {
ch = state.input.charCodeAt(++state.position);
_position = state.position;
- while (ch !== 0 && !is_WS_OR_EOL$1(ch)) {
+ while (ch !== 0 && !is_WS_OR_EOL(ch)) {
ch = state.input.charCodeAt(++state.position);
}
@@ -3052,81 +11281,81 @@ function readDocument$1(state) {
directiveArgs = [];
if (directiveName.length < 1) {
- throwError$2(state, 'directive name must not be less than one character in length');
+ throwError$1(state, 'directive name must not be less than one character in length');
}
while (ch !== 0) {
- while (is_WHITE_SPACE$1(ch)) {
+ while (is_WHITE_SPACE(ch)) {
ch = state.input.charCodeAt(++state.position);
}
if (ch === 0x23/* # */) {
do { ch = state.input.charCodeAt(++state.position); }
- while (ch !== 0 && !is_EOL$1(ch));
+ while (ch !== 0 && !is_EOL(ch));
break;
}
- if (is_EOL$1(ch)) break;
+ if (is_EOL(ch)) break;
_position = state.position;
- while (ch !== 0 && !is_WS_OR_EOL$1(ch)) {
+ while (ch !== 0 && !is_WS_OR_EOL(ch)) {
ch = state.input.charCodeAt(++state.position);
}
directiveArgs.push(state.input.slice(_position, state.position));
}
- if (ch !== 0) readLineBreak$1(state);
+ if (ch !== 0) readLineBreak(state);
- if (_hasOwnProperty$5.call(directiveHandlers$1, directiveName)) {
- directiveHandlers$1[directiveName](state, directiveName, directiveArgs);
+ if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {
+ directiveHandlers[directiveName](state, directiveName, directiveArgs);
} else {
- throwWarning$1(state, 'unknown document directive "' + directiveName + '"');
+ throwWarning(state, 'unknown document directive "' + directiveName + '"');
}
}
- skipSeparationSpace$1(state, true, -1);
+ skipSeparationSpace(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);
+ skipSeparationSpace(state, true, -1);
} else if (hasDirectives) {
- throwError$2(state, 'directives end mark is expected');
+ throwError$1(state, 'directives end mark is expected');
}
- composeNode$1(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT$1, false, true);
- skipSeparationSpace$1(state, true, -1);
+ composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
+ skipSeparationSpace(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');
+ PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {
+ throwWarning(state, 'non-ASCII line breaks are interpreted as content');
}
state.documents.push(state.result);
- if (state.position === state.lineStart && testDocumentSeparator$1(state)) {
+ if (state.position === state.lineStart && testDocumentSeparator(state)) {
if (state.input.charCodeAt(state.position) === 0x2E/* . */) {
state.position += 3;
- skipSeparationSpace$1(state, true, -1);
+ skipSeparationSpace(state, true, -1);
}
return;
}
if (state.position < (state.length - 1)) {
- throwError$2(state, 'end of the stream or a document separator is expected');
+ throwError$1(state, 'end of the stream or a document separator is expected');
} else {
return;
}
}
-function loadDocuments$1(input, options) {
+function loadDocuments(input, options) {
input = String(input);
options = options || {};
@@ -3144,13 +11373,13 @@ function loadDocuments$1(input, options) {
}
}
- var state = new State$3(input, options);
+ var state = new State$1(input, options);
var nullpos = input.indexOf('\0');
if (nullpos !== -1) {
state.position = nullpos;
- throwError$2(state, 'null byte is not allowed in input');
+ throwError$1(state, 'null byte is not allowed in input');
}
// Use 0 as string terminator. That significantly simplifies bounds check.
@@ -3162,20 +11391,20 @@ function loadDocuments$1(input, options) {
}
while (state.position < (state.length - 1)) {
- readDocument$1(state);
+ readDocument(state);
}
return state.documents;
}
-function loadAll$2(input, iterator, options) {
+function loadAll$1(input, iterator, options) {
if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {
options = iterator;
iterator = null;
}
- var documents = loadDocuments$1(input, options);
+ var documents = loadDocuments(input, options);
if (typeof iterator !== 'function') {
return documents;
@@ -3187,8 +11416,8 @@ function loadAll$2(input, iterator, options) {
}
-function load$5(input, options) {
- var documents = loadDocuments$1(input, options);
+function load$1(input, options) {
+ var documents = loadDocuments(input, options);
if (documents.length === 0) {
/*eslint-disable no-undefined*/
@@ -3196,91 +11425,79 @@ function load$5(input, options) {
} else if (documents.length === 1) {
return documents[0];
}
- throw new YAMLException$3('expected a single document in the stream, but found more');
+ throw new exception('expected a single document in the stream, but found more');
}
-function safeLoadAll$1(input, iterator, options) {
- if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') {
- options = iterator;
- iterator = null;
- }
+var loadAll_1 = loadAll$1;
+var load_1 = load$1;
- return loadAll$2(input, iterator, common$6.extend({ schema: DEFAULT_SAFE_SCHEMA$1 }, options));
-}
+var loader = {
+ loadAll: loadAll_1,
+ load: load_1
+};
+/*eslint-disable no-use-before-define*/
-function safeLoad$1(input, options) {
- return load$5(input, common$6.extend({ schema: DEFAULT_SAFE_SCHEMA$1 }, options));
-}
-loader$2.loadAll = loadAll$2;
-loader$2.load = load$5;
-loader$2.safeLoadAll = safeLoadAll$1;
-loader$2.safeLoad = safeLoad$1;
-var dumper$2 = {};
-/*eslint-disable no-use-before-define*/
+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 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 = [
+var DEPRECATED_BOOLEANS_SYNTAX = [
'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',
'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'
];
-function compileStyleMap$1(schema, map) {
+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 {};
@@ -3297,7 +11514,7 @@ function compileStyleMap$1(schema, map) {
}
type = schema.compiledTypeMap['fallback'][tag];
- if (type && _hasOwnProperty$4.call(type.styleAliases, style)) {
+ if (type && _hasOwnProperty.call(type.styleAliases, style)) {
style = type.styleAliases[style];
}
@@ -3307,7 +11524,7 @@ function compileStyleMap$1(schema, map) {
return result;
}
-function encodeHex$1(character) {
+function encodeHex(character) {
var string, handle, length;
string = character.toString(16).toUpperCase();
@@ -3322,24 +11539,31 @@ function encodeHex$1(character) {
handle = 'U';
length = 8;
} else {
- throw new YAMLException$2('code point within a string may not be greater than 0xFFFFFFFF');
+ throw new exception('code point within a string may not be greater than 0xFFFFFFFF');
}
- return '\\' + handle + common$5.repeat('0', length - string.length) + string;
+ return '\\' + handle + common$4.repeat('0', length - string.length) + string;
}
-function State$2(options) {
- this.schema = options['schema'] || DEFAULT_FULL_SCHEMA;
+
+var QUOTING_TYPE_SINGLE = 1,
+ QUOTING_TYPE_DOUBLE = 2;
+
+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$5.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);
- this.styleMap = compileStyleMap$1(this.schema, options['styles'] || null);
+ 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;
@@ -3352,8 +11576,8 @@ function State$2(options) {
}
// Indents every line in a string. Empty lines (\n only) are not indented.
-function indentString$1(string, spaces) {
- var ind = common$5.repeat(' ', spaces),
+function indentString(string, spaces) {
+ var ind = common$4.repeat(' ', spaces),
position = 0,
next = -1,
result = '',
@@ -3378,11 +11602,11 @@ function indentString$1(string, spaces) {
return result;
}
-function generateNextLine$1(state, level) {
- return '\n' + common$5.repeat(' ', state.indent * level);
+function generateNextLine(state, level) {
+ return '\n' + common$4.repeat(' ', state.indent * level);
}
-function testImplicitResolving$1(state, str) {
+function testImplicitResolving(state, str) {
var index, length, type;
for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {
@@ -3397,96 +11621,128 @@ function testImplicitResolving$1(state, str) {
}
// [33] s-white ::= s-space | s-tab
-function isWhitespace$1(c) {
- return c === CHAR_SPACE$1 || c === CHAR_TAB$1;
+function isWhitespace(c) {
+ return c === CHAR_SPACE || c === CHAR_TAB;
}
// 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) {
+function isPrintable(c) {
return (0x00020 <= c && c <= 0x00007E)
|| ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)
- || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */)
+ || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM)
|| (0x10000 <= c && c <= 0x10FFFF);
}
// [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)));
+// 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;
+}
+
+// [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 ':[^ ]'
}
// Simplified test for values allowed as the first character in plain style.
-function isPlainSafeFirst$1(c) {
+function isPlainSafeFirst(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
+ // 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$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_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$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_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$1
- && c !== CHAR_COMMERCIAL_AT$1
- && c !== CHAR_GRAVE_ACCENT$1;
+ && c !== CHAR_PERCENT
+ && c !== CHAR_COMMERCIAL_AT
+ && c !== CHAR_GRAVE_ACCENT;
+}
+
+// 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;
+}
+
+// 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;
}
// Determines whether block indentation indicator is required.
-function needIndentIndicator$1(string) {
+function needIndentIndicator(string) {
var leadingSpaceRe = /^\n* /;
return leadingSpaceRe.test(string);
}
-var STYLE_PLAIN$1 = 1,
- STYLE_SINGLE$1 = 2,
- STYLE_LITERAL$1 = 3,
- STYLE_FOLDED$1 = 4,
- STYLE_DOUBLE$1 = 5;
+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.
@@ -3495,32 +11751,35 @@ var STYLE_PLAIN$1 = 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$1(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) {
+function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth,
+ testAmbiguousType, quotingType, forceQuotes, inblock) {
+
var i;
- var char, prev_char;
+ 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(string.charCodeAt(0))
- && !isWhitespace$1(string.charCodeAt(string.length - 1));
+ var plain = isPlainSafeFirst(codePointAt(string, 0))
+ && isPlainSafeLast(codePointAt(string, string.length - 1));
- if (singleLineOnly) {
+ if (singleLineOnly || forceQuotes) {
// 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;
+ for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {
+ char = codePointAt(string, i);
+ if (!isPrintable(char)) {
+ return STYLE_DOUBLE;
}
- prev_char = i > 0 ? string.charCodeAt(i - 1) : null;
- plain = plain && isPlainSafe$1(char, prev_char);
+ plain = plain && isPlainSafe(char, prevChar, inblock);
+ prevChar = char;
}
} else {
// Case: block styles permitted.
- for (i = 0; i < string.length; i++) {
- char = string.charCodeAt(i);
- if (char === CHAR_LINE_FEED$1) {
+ 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) {
@@ -3530,11 +11789,11 @@ function chooseScalarStyle$1(string, singleLineOnly, indentPerLevel, lineWidth,
string[previousLineBreak + 1] !== ' ');
previousLineBreak = i;
}
- } else if (!isPrintable$1(char)) {
- return STYLE_DOUBLE$1;
+ } else if (!isPrintable(char)) {
+ return STYLE_DOUBLE;
}
- prev_char = i > 0 ? string.charCodeAt(i - 1) : null;
- plain = plain && isPlainSafe$1(char, prev_char);
+ plain = plain && isPlainSafe(char, prevChar, inblock);
+ prevChar = char;
}
// in case the end is missing a \n
hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&
@@ -3547,16 +11806,21 @@ function chooseScalarStyle$1(string, singleLineOnly, indentPerLevel, lineWidth,
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;
+ 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$1(string)) {
- return STYLE_DOUBLE$1;
+ 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.
- return hasFoldableLine ? STYLE_FOLDED$1 : STYLE_LITERAL$1;
+ if (!forceQuotes) {
+ return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;
+ }
+ return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;
}
// Note: line breaking/folding is implemented for only the folded style.
@@ -3565,14 +11829,15 @@ function chooseScalarStyle$1(string, singleLineOnly, indentPerLevel, lineWidth,
// • 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) {
+function writeScalar(state, string, level, iskey, inblock) {
state.dump = (function () {
if (string.length === 0) {
- return "''";
+ return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''";
}
- if (!state.noCompatMode &&
- DEPRECATED_BOOLEANS_SYNTAX$1.indexOf(string) !== -1) {
- return "'" + string + "'";
+ if (!state.noCompatMode) {
+ if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {
+ return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'");
+ }
}
var indent = state.indent * Math.max(1, level); // no 0-indent scalars
@@ -3591,31 +11856,33 @@ function writeScalar$1(state, string, level, iskey) {
// No block styles in flow mode.
|| (state.flowLevel > -1 && level >= state.flowLevel);
function testAmbiguity(string) {
- return testImplicitResolving$1(state, string);
+ return testImplicitResolving(state, string);
}
- switch (chooseScalarStyle$1(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) {
- case STYLE_PLAIN$1:
+ switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,
+ testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {
+
+ case STYLE_PLAIN:
return string;
- case STYLE_SINGLE$1:
+ case STYLE_SINGLE:
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) + '"';
+ 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 YAMLException$2('impossible error: invalid scalar style');
+ throw new exception('impossible error: invalid scalar style');
}
}());
}
// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.
-function blockHeader$1(string, indentPerLevel) {
- var indentIndicator = needIndentIndicator$1(string) ? String(indentPerLevel) : '';
+function blockHeader(string, indentPerLevel) {
+ var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';
// note the special case: the string '\n' counts as a "trailing" empty line.
var clip = string[string.length - 1] === '\n';
@@ -3626,13 +11893,13 @@ function blockHeader$1(string, indentPerLevel) {
}
// (See the note for writeScalar.)
-function dropEndingNewline$1(string) {
+function dropEndingNewline(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$1(string, width) {
+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$.
@@ -3644,7 +11911,7 @@ function foldString$1(string, width) {
var nextLF = string.indexOf('\n');
nextLF = nextLF !== -1 ? nextLF : string.length;
lineRe.lastIndex = nextLF;
- return foldLine$1(string.slice(0, nextLF), width);
+ 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] === ' ';
@@ -3658,7 +11925,7 @@ function foldString$1(string, width) {
result += prefix
+ (!prevMoreIndented && !moreIndented && line !== ''
? '\n' : '')
- + foldLine$1(line, width);
+ + foldLine(line, width);
prevMoreIndented = moreIndented;
}
@@ -3669,7 +11936,7 @@ function foldString$1(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$1(line, width) {
+function foldLine(line, width) {
if (line === '' || line[0] === ' ') return line;
// Since a more-indented line adds a \n, breaks can't be followed by a space.
@@ -3709,42 +11976,46 @@ function foldLine$1(line, width) {
}
// Escapes a double-quoted string.
-function escapeString$1(string) {
+function escapeString(string) {
var result = '';
- var char, nextChar;
+ var char = 0;
var escapeSeq;
- 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;
- }
+ for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {
+ char = codePointAt(string, i);
+ escapeSeq = ESCAPE_SEQUENCES[char];
+
+ if (!escapeSeq && isPrintable(char)) {
+ result += string[i];
+ if (char >= 0x10000) result += string[i + 1];
+ } else {
+ result += escapeSeq || encodeHex(char);
}
- escapeSeq = ESCAPE_SEQUENCES$1[char];
- result += !escapeSeq && isPrintable$1(char)
- ? string[i]
- : escapeSeq || encodeHex$1(char);
}
return result;
}
-function writeFlowSequence$1(state, level, object) {
+function writeFlowSequence(state, level, object) {
var _result = '',
_tag = state.tag,
index,
- length;
+ length,
+ value;
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 ? ' ' : '');
+ value = object[index];
+
+ if (state.replacer) {
+ value = state.replacer.call(object, String(index), value);
+ }
+
+ // 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;
}
}
@@ -3753,20 +12024,30 @@ function writeFlowSequence$1(state, level, object) {
state.dump = '[' + _result + ']';
}
-function writeBlockSequence$1(state, level, object, compact) {
+function writeBlockSequence(state, level, object, compact) {
var _result = '',
_tag = state.tag,
index,
- length;
+ length,
+ value;
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);
+ value = object[index];
+
+ if (state.replacer) {
+ value = state.replacer.call(object, String(index), value);
+ }
+
+ // 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))) {
+
+ if (!compact || _result !== '') {
+ _result += generateNextLine(state, level);
}
- if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) {
+ if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
_result += '-';
} else {
_result += '- ';
@@ -3780,7 +12061,7 @@ function writeBlockSequence$1(state, level, object, compact) {
state.dump = _result || '[]'; // Empty sequence if no valid values.
}
-function writeFlowMapping$1(state, level, object) {
+function writeFlowMapping(state, level, object) {
var _result = '',
_tag = state.tag,
objectKeyList = Object.keys(object),
@@ -3793,14 +12074,18 @@ function writeFlowMapping$1(state, level, object) {
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
pairBuffer = '';
- if (index !== 0) pairBuffer += ', ';
+ if (_result !== '') pairBuffer += ', ';
if (state.condenseFlow) pairBuffer += '"';
objectKey = objectKeyList[index];
objectValue = object[objectKey];
- if (!writeNode$1(state, level, objectKey, false, false)) {
+ if (state.replacer) {
+ objectValue = state.replacer.call(object, objectKey, objectValue);
+ }
+
+ if (!writeNode(state, level, objectKey, false, false)) {
continue; // Skip this pair because of invalid key;
}
@@ -3808,7 +12093,7 @@ function writeFlowMapping$1(state, level, object) {
pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' ');
- if (!writeNode$1(state, level, objectValue, false, false)) {
+ if (!writeNode(state, level, objectValue, false, false)) {
continue; // Skip this pair because of invalid value.
}
@@ -3822,7 +12107,7 @@ function writeFlowMapping$1(state, level, object) {
state.dump = '{' + _result + '}';
}
-function writeBlockMapping$1(state, level, object, compact) {
+function writeBlockMapping(state, level, object, compact) {
var _result = '',
_tag = state.tag,
objectKeyList = Object.keys(object),
@@ -3842,20 +12127,24 @@ function writeBlockMapping$1(state, level, object, compact) {
objectKeyList.sort(state.sortKeys);
} else if (state.sortKeys) {
// Something is wrong
- throw new YAMLException$2('sortKeys must be a boolean or a function');
+ throw new exception('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$1(state, level);
+ if (!compact || _result !== '') {
+ pairBuffer += generateNextLine(state, level);
}
objectKey = objectKeyList[index];
objectValue = object[objectKey];
- if (!writeNode$1(state, level + 1, objectKey, true, true, true)) {
+ if (state.replacer) {
+ objectValue = state.replacer.call(object, objectKey, objectValue);
+ }
+
+ if (!writeNode(state, level + 1, objectKey, true, true, true)) {
continue; // Skip this pair because of invalid key.
}
@@ -3863,7 +12152,7 @@ function writeBlockMapping$1(state, level, object, compact) {
(state.dump && state.dump.length > 1024);
if (explicitPair) {
- if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) {
+ if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
pairBuffer += '?';
} else {
pairBuffer += '? ';
@@ -3873,14 +12162,14 @@ function writeBlockMapping$1(state, level, object, compact) {
pairBuffer += state.dump;
if (explicitPair) {
- pairBuffer += generateNextLine$1(state, level);
+ pairBuffer += generateNextLine(state, level);
}
- if (!writeNode$1(state, level + 1, objectValue, true, explicitPair)) {
+ if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {
continue; // Skip this pair because of invalid value.
}
- if (state.dump && CHAR_LINE_FEED$1 === state.dump.charCodeAt(0)) {
+ if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
pairBuffer += ':';
} else {
pairBuffer += ': ';
@@ -3896,7 +12185,7 @@ function writeBlockMapping$1(state, level, object, compact) {
state.dump = _result || '{}'; // Empty mapping if no valid pairs.
}
-function detectType$1(state, object, explicit) {
+function detectType(state, object, explicit) {
var _result, typeList, index, length, type, style;
typeList = explicit ? state.explicitTypes : state.implicitTypes;
@@ -3908,17 +12197,25 @@ function detectType$1(state, object, explicit) {
(!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&
(!type.predicate || type.predicate(object))) {
- state.tag = explicit ? type.tag : '?';
+ if (explicit) {
+ if (type.multi && type.representName) {
+ state.tag = type.representName(object);
+ } else {
+ state.tag = type.tag;
+ }
+ } else {
+ state.tag = '?';
+ }
if (type.represent) {
style = state.styleMap[type.tag] || type.defaultStyle;
- if (_toString$3.call(type.represent) === '[object Function]') {
+ if (_toString.call(type.represent) === '[object Function]') {
_result = type.represent(object, style);
- } else if (_hasOwnProperty$4.call(type.represent, style)) {
+ } else if (_hasOwnProperty.call(type.represent, style)) {
_result = type.represent[style](object, style);
} else {
- throw new YAMLException$2('!<' + type.tag + '> tag resolver accepts not "' + style + '" style');
+ throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style');
}
state.dump = _result;
@@ -3934,15 +12231,17 @@ function detectType$1(state, object, explicit) {
// 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) {
+function writeNode(state, level, object, block, compact, iskey, isblockseq) {
state.tag = null;
state.dump = object;
- if (!detectType$1(state, object, false)) {
- detectType$1(state, object, true);
+ if (!detectType(state, object, false)) {
+ detectType(state, object, true);
}
- var type = _toString$3.call(state.dump);
+ var type = _toString.call(state.dump);
+ var inblock = block;
+ var tagStr;
if (block) {
block = (state.flowLevel < 0 || state.flowLevel > level);
@@ -3969,53 +12268,83 @@ function writeNode$1(state, level, object, block, compact, iskey) {
}
if (type === '[object Object]') {
if (block && (Object.keys(state.dump).length !== 0)) {
- writeBlockMapping$1(state, level, state.dump, compact);
+ writeBlockMapping(state, level, state.dump, compact);
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + state.dump;
}
} else {
- writeFlowMapping$1(state, level, state.dump);
+ writeFlowMapping(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 (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$1(state, arrayLevel, state.dump);
+ writeFlowSequence(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);
+ writeScalar(state, state.dump, level, iskey, inblock);
}
+ } else if (type === '[object Undefined]') {
+ return false;
} else {
if (state.skipInvalid) return false;
- throw new YAMLException$2('unacceptable kind of an object to dump ' + type);
+ throw new exception('unacceptable kind of an object to dump ' + type);
}
if (state.tag !== null && state.tag !== '?') {
- state.dump = '!<' + state.tag + '> ' + state.dump;
+ // 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 + '>';
+ }
+
+ state.dump = tagStr + ' ' + state.dump;
}
}
return true;
}
-function getDuplicateReferences$1(object, state) {
+function getDuplicateReferences(object, state) {
var objects = [],
duplicatesIndexes = [],
index,
length;
- inspectNode$1(object, objects, duplicatesIndexes);
+ inspectNode(object, objects, duplicatesIndexes);
for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {
state.duplicates.push(objects[duplicatesIndexes[index]]);
@@ -4023,7 +12352,7 @@ function getDuplicateReferences$1(object, state) {
state.usedDuplicates = new Array(length);
}
-function inspectNode$1(object, objects, duplicatesIndexes) {
+function inspectNode(object, objects, duplicatesIndexes) {
var objectKeyList,
index,
length;
@@ -4039,79 +12368,100 @@ function inspectNode$1(object, objects, duplicatesIndexes) {
if (Array.isArray(object)) {
for (index = 0, length = object.length; index < length; index += 1) {
- inspectNode$1(object[index], objects, duplicatesIndexes);
+ inspectNode(object[index], objects, duplicatesIndexes);
}
} else {
objectKeyList = Object.keys(object);
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
- inspectNode$1(object[objectKeyList[index]], objects, duplicatesIndexes);
+ inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);
}
}
}
}
}
-function dump$2(input, options) {
+function dump$1(input, options) {
options = options || {};
- var state = new State$2(options);
+ var state = new State(options);
- if (!state.noRefs) getDuplicateReferences$1(input, state);
+ if (!state.noRefs) getDuplicateReferences(input, state);
- if (writeNode$1(state, 0, input, true, true)) return state.dump + '\n';
+ var value = input;
- return '';
-}
+ if (state.replacer) {
+ value = state.replacer.call({ '': value }, '', value);
+ }
-function safeDump$1(input, options) {
- return dump$2(input, common$5.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));
-}
+ if (writeNode(state, 0, value, true, true)) return state.dump + '\n';
-dumper$2.dump = dump$2;
-dumper$2.safeDump = safeDump$1;
+ return '';
+}
-var loader$1 = loader$2;
-var dumper$1 = dumper$2;
+var dump_1 = dump$1;
+var dumper = {
+ dump: dump_1
+};
-function deprecated(name) {
+function renamed(from, to) {
return function () {
- throw new Error('Function ' + name + ' is deprecated and cannot be used.');
+ throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' +
+ 'Use yaml.' + to + ' instead, which is now safe by default.');
};
}
-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
-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
-jsYaml$2.scan = deprecated('scan');
-jsYaml$2.parse = deprecated('parse');
-jsYaml$2.compose = deprecated('compose');
-jsYaml$2.addConstructor = deprecated('addConstructor');
+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 yaml$1 = jsYaml$2;
+// 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
+};
+// 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$1 = yaml$1;
+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
+};
var isArrayish$2 = function isArrayish(obj) {
if (!obj) {
@@ -4122,7 +12472,7 @@ var isArrayish$2 = function isArrayish(obj) {
(obj.length >= 0 && obj.splice instanceof Function);
};
-var util$4 = require$$0__default['default'];
+var util$2 = require$$0$4;
var isArrayish$1 = isArrayish$2;
var errorEx$1 = function errorEx(name, properties) {
@@ -4226,7 +12576,7 @@ var errorEx$1 = function errorEx(name, properties) {
Object.setPrototypeOf(errorExError.prototype, Error.prototype);
Object.setPrototypeOf(errorExError, Error);
} else {
- util$4.inherits(errorExError, Error);
+ util$2.inherits(errorExError, Error);
}
return errorExError;
@@ -4438,16 +12788,16 @@ var LinesAndColumns$1 = (function () {
return LinesAndColumns;
}());
-var dist$2 = /*#__PURE__*/Object.freeze({
+var dist = /*#__PURE__*/Object.freeze({
__proto__: null,
'default': LinesAndColumns$1
});
-var require$$2 = /*@__PURE__*/getAugmentedNamespace(dist$2);
+var require$$2 = /*@__PURE__*/getAugmentedNamespace(dist);
-var lib$9 = {};
+var lib$4 = {};
-var lib$8 = {};
+var lib$3 = {};
var jsTokens = {};
@@ -4475,7 +12825,7 @@ jsTokens.matchToToken = function(match) {
return token
};
-var lib$7 = {};
+var lib$2 = {};
var identifier = {};
@@ -4658,13 +13008,13 @@ Object.defineProperty(exports, "isKeyword", {
var _identifier = identifier;
var _keyword = keyword;
-}(lib$7));
+}(lib$2));
-var chalk$2 = {exports: {}};
+var chalk = {exports: {}};
var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
-var escapeStringRegexp$3 = function (str) {
+var escapeStringRegexp$1 = function (str) {
if (typeof str !== 'string') {
throw new TypeError('Expected a string');
}
@@ -4672,11 +13022,11 @@ var escapeStringRegexp$3 = function (str) {
return str.replace(matchOperatorsRe, '\\$&');
};
-var ansiStyles$2 = {exports: {}};
+var ansiStyles = {exports: {}};
-var conversions$5 = {exports: {}};
+var conversions$2 = {exports: {}};
-var colorName$1 = {
+var colorName = {
"aliceblue": [240, 248, 255],
"antiquewhite": [250, 235, 215],
"aqua": [0, 255, 255],
@@ -4829,20 +13179,20 @@ var colorName$1 = {
/* MIT license */
-var cssKeywords$1 = colorName$1;
+var 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.)
-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 reverseKeywords = {};
+for (var key$1 in cssKeywords) {
+ if (cssKeywords.hasOwnProperty(key$1)) {
+ reverseKeywords[cssKeywords[key$1]] = key$1;
}
}
-var convert$6 = conversions$5.exports = {
+var convert$2 = conversions$2.exports = {
rgb: {channels: 3, labels: 'rgb'},
hsl: {channels: 3, labels: 'hsl'},
hsv: {channels: 3, labels: 'hsv'},
@@ -4861,30 +13211,30 @@ var convert$6 = conversions$5.exports = {
};
// hide .channels and .labels properties
-for (var model in convert$6) {
- if (convert$6.hasOwnProperty(model)) {
- if (!('channels' in convert$6[model])) {
+for (var model in convert$2) {
+ if (convert$2.hasOwnProperty(model)) {
+ if (!('channels' in convert$2[model])) {
throw new Error('missing channels property: ' + model);
}
- if (!('labels' in convert$6[model])) {
+ if (!('labels' in convert$2[model])) {
throw new Error('missing channel labels property: ' + model);
}
- if (convert$6[model].labels.length !== convert$6[model].channels) {
+ if (convert$2[model].labels.length !== convert$2[model].channels) {
throw new Error('channel and label counts mismatch: ' + model);
}
- 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});
+ 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});
}
}
-convert$6.rgb.hsl = function (rgb) {
+convert$2.rgb.hsl = function (rgb) {
var r = rgb[0] / 255;
var g = rgb[1] / 255;
var b = rgb[2] / 255;
@@ -4924,7 +13274,7 @@ convert$6.rgb.hsl = function (rgb) {
return [h, s * 100, l * 100];
};
-convert$6.rgb.hsv = function (rgb) {
+convert$2.rgb.hsv = function (rgb) {
var rdif;
var gdif;
var bdif;
@@ -4969,11 +13319,11 @@ convert$6.rgb.hsv = function (rgb) {
];
};
-convert$6.rgb.hwb = function (rgb) {
+convert$2.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 h = convert$2.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));
@@ -4981,7 +13331,7 @@ convert$6.rgb.hwb = function (rgb) {
return [h, w * 100, b * 100];
};
-convert$6.rgb.cmyk = function (rgb) {
+convert$2.rgb.cmyk = function (rgb) {
var r = rgb[0] / 255;
var g = rgb[1] / 255;
var b = rgb[2] / 255;
@@ -5001,7 +13351,7 @@ convert$6.rgb.cmyk = function (rgb) {
/**
* See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
* */
-function comparativeDistance$1(x, y) {
+function comparativeDistance(x, y) {
return (
Math.pow(x[0] - y[0], 2) +
Math.pow(x[1] - y[1], 2) +
@@ -5009,8 +13359,8 @@ function comparativeDistance$1(x, y) {
);
}
-convert$6.rgb.keyword = function (rgb) {
- var reversed = reverseKeywords$1[rgb];
+convert$2.rgb.keyword = function (rgb) {
+ var reversed = reverseKeywords[rgb];
if (reversed) {
return reversed;
}
@@ -5018,12 +13368,12 @@ convert$6.rgb.keyword = function (rgb) {
var currentClosestDistance = Infinity;
var currentClosestKeyword;
- for (var keyword in cssKeywords$1) {
- if (cssKeywords$1.hasOwnProperty(keyword)) {
- var value = cssKeywords$1[keyword];
+ for (var keyword in cssKeywords) {
+ if (cssKeywords.hasOwnProperty(keyword)) {
+ var value = cssKeywords[keyword];
// Compute comparative distance
- var distance = comparativeDistance$1(rgb, value);
+ var distance = comparativeDistance(rgb, value);
// Check if its less, if so set as closest
if (distance < currentClosestDistance) {
@@ -5036,11 +13386,11 @@ convert$6.rgb.keyword = function (rgb) {
return currentClosestKeyword;
};
-convert$6.keyword.rgb = function (keyword) {
- return cssKeywords$1[keyword];
+convert$2.keyword.rgb = function (keyword) {
+ return cssKeywords[keyword];
};
-convert$6.rgb.xyz = function (rgb) {
+convert$2.rgb.xyz = function (rgb) {
var r = rgb[0] / 255;
var g = rgb[1] / 255;
var b = rgb[2] / 255;
@@ -5057,8 +13407,8 @@ convert$6.rgb.xyz = function (rgb) {
return [x * 100, y * 100, z * 100];
};
-convert$6.rgb.lab = function (rgb) {
- var xyz = convert$6.rgb.xyz(rgb);
+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];
@@ -5081,7 +13431,7 @@ convert$6.rgb.lab = function (rgb) {
return [l, a, b];
};
-convert$6.hsl.rgb = function (hsl) {
+convert$2.hsl.rgb = function (hsl) {
var h = hsl[0] / 360;
var s = hsl[1] / 100;
var l = hsl[2] / 100;
@@ -5130,7 +13480,7 @@ convert$6.hsl.rgb = function (hsl) {
return rgb;
};
-convert$6.hsl.hsv = function (hsl) {
+convert$2.hsl.hsv = function (hsl) {
var h = hsl[0];
var s = hsl[1] / 100;
var l = hsl[2] / 100;
@@ -5148,7 +13498,7 @@ convert$6.hsl.hsv = function (hsl) {
return [h, sv * 100, v * 100];
};
-convert$6.hsv.rgb = function (hsv) {
+convert$2.hsv.rgb = function (hsv) {
var h = hsv[0] / 60;
var s = hsv[1] / 100;
var v = hsv[2] / 100;
@@ -5176,7 +13526,7 @@ convert$6.hsv.rgb = function (hsv) {
}
};
-convert$6.hsv.hsl = function (hsv) {
+convert$2.hsv.hsl = function (hsv) {
var h = hsv[0];
var s = hsv[1] / 100;
var v = hsv[2] / 100;
@@ -5196,7 +13546,7 @@ convert$6.hsv.hsl = function (hsv) {
};
// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
-convert$6.hwb.rgb = function (hwb) {
+convert$2.hwb.rgb = function (hwb) {
var h = hwb[0] / 360;
var wh = hwb[1] / 100;
var bl = hwb[2] / 100;
@@ -5239,7 +13589,7 @@ convert$6.hwb.rgb = function (hwb) {
return [r * 255, g * 255, b * 255];
};
-convert$6.cmyk.rgb = function (cmyk) {
+convert$2.cmyk.rgb = function (cmyk) {
var c = cmyk[0] / 100;
var m = cmyk[1] / 100;
var y = cmyk[2] / 100;
@@ -5255,7 +13605,7 @@ convert$6.cmyk.rgb = function (cmyk) {
return [r * 255, g * 255, b * 255];
};
-convert$6.xyz.rgb = function (xyz) {
+convert$2.xyz.rgb = function (xyz) {
var x = xyz[0] / 100;
var y = xyz[1] / 100;
var z = xyz[2] / 100;
@@ -5287,7 +13637,7 @@ convert$6.xyz.rgb = function (xyz) {
return [r * 255, g * 255, b * 255];
};
-convert$6.xyz.lab = function (xyz) {
+convert$2.xyz.lab = function (xyz) {
var x = xyz[0];
var y = xyz[1];
var z = xyz[2];
@@ -5310,7 +13660,7 @@ convert$6.xyz.lab = function (xyz) {
return [l, a, b];
};
-convert$6.lab.xyz = function (lab) {
+convert$2.lab.xyz = function (lab) {
var l = lab[0];
var a = lab[1];
var b = lab[2];
@@ -5336,7 +13686,7 @@ convert$6.lab.xyz = function (lab) {
return [x, y, z];
};
-convert$6.lab.lch = function (lab) {
+convert$2.lab.lch = function (lab) {
var l = lab[0];
var a = lab[1];
var b = lab[2];
@@ -5356,7 +13706,7 @@ convert$6.lab.lch = function (lab) {
return [l, c, h];
};
-convert$6.lch.lab = function (lch) {
+convert$2.lch.lab = function (lch) {
var l = lch[0];
var c = lch[1];
var h = lch[2];
@@ -5371,11 +13721,11 @@ convert$6.lch.lab = function (lch) {
return [l, a, b];
};
-convert$6.rgb.ansi16 = function (args) {
+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$6.rgb.hsv(args)[2]; // hsv -> ansi16 optimization
+ var value = 1 in arguments ? arguments[1] : convert$2.rgb.hsv(args)[2]; // hsv -> ansi16 optimization
value = Math.round(value / 50);
@@ -5395,13 +13745,13 @@ convert$6.rgb.ansi16 = function (args) {
return ansi;
};
-convert$6.hsv.ansi16 = function (args) {
+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$6.rgb.ansi16(convert$6.hsv.rgb(args), args[2]);
+ return convert$2.rgb.ansi16(convert$2.hsv.rgb(args), args[2]);
};
-convert$6.rgb.ansi256 = function (args) {
+convert$2.rgb.ansi256 = function (args) {
var r = args[0];
var g = args[1];
var b = args[2];
@@ -5428,7 +13778,7 @@ convert$6.rgb.ansi256 = function (args) {
return ansi;
};
-convert$6.ansi16.rgb = function (args) {
+convert$2.ansi16.rgb = function (args) {
var color = args % 10;
// handle greyscale
@@ -5450,7 +13800,7 @@ convert$6.ansi16.rgb = function (args) {
return [r, g, b];
};
-convert$6.ansi256.rgb = function (args) {
+convert$2.ansi256.rgb = function (args) {
// handle greyscale
if (args >= 232) {
var c = (args - 232) * 10 + 8;
@@ -5467,7 +13817,7 @@ convert$6.ansi256.rgb = function (args) {
return [r, g, b];
};
-convert$6.rgb.hex = function (args) {
+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);
@@ -5476,7 +13826,7 @@ convert$6.rgb.hex = function (args) {
return '000000'.substring(string.length) + string;
};
-convert$6.hex.rgb = function (args) {
+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];
@@ -5498,7 +13848,7 @@ convert$6.hex.rgb = function (args) {
return [r, g, b];
};
-convert$6.rgb.hcg = function (rgb) {
+convert$2.rgb.hcg = function (rgb) {
var r = rgb[0] / 255;
var g = rgb[1] / 255;
var b = rgb[2] / 255;
@@ -5532,7 +13882,7 @@ convert$6.rgb.hcg = function (rgb) {
return [hue * 360, chroma * 100, grayscale * 100];
};
-convert$6.hsl.hcg = function (hsl) {
+convert$2.hsl.hcg = function (hsl) {
var s = hsl[1] / 100;
var l = hsl[2] / 100;
var c = 1;
@@ -5551,7 +13901,7 @@ convert$6.hsl.hcg = function (hsl) {
return [hsl[0], c * 100, f * 100];
};
-convert$6.hsv.hcg = function (hsv) {
+convert$2.hsv.hcg = function (hsv) {
var s = hsv[1] / 100;
var v = hsv[2] / 100;
@@ -5565,7 +13915,7 @@ convert$6.hsv.hcg = function (hsv) {
return [hsv[0], c * 100, f * 100];
};
-convert$6.hcg.rgb = function (hcg) {
+convert$2.hcg.rgb = function (hcg) {
var h = hcg[0] / 360;
var c = hcg[1] / 100;
var g = hcg[2] / 100;
@@ -5604,7 +13954,7 @@ convert$6.hcg.rgb = function (hcg) {
];
};
-convert$6.hcg.hsv = function (hcg) {
+convert$2.hcg.hsv = function (hcg) {
var c = hcg[1] / 100;
var g = hcg[2] / 100;
@@ -5618,7 +13968,7 @@ convert$6.hcg.hsv = function (hcg) {
return [hcg[0], f * 100, v * 100];
};
-convert$6.hcg.hsl = function (hcg) {
+convert$2.hcg.hsl = function (hcg) {
var c = hcg[1] / 100;
var g = hcg[2] / 100;
@@ -5635,14 +13985,14 @@ convert$6.hcg.hsl = function (hcg) {
return [hcg[0], s * 100, l * 100];
};
-convert$6.hcg.hwb = function (hcg) {
+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];
};
-convert$6.hwb.hcg = function (hwb) {
+convert$2.hwb.hcg = function (hwb) {
var w = hwb[1] / 100;
var b = hwb[2] / 100;
var v = 1 - b;
@@ -5656,35 +14006,35 @@ convert$6.hwb.hcg = function (hwb) {
return [hwb[0], c * 100, g * 100];
};
-convert$6.apple.rgb = function (apple) {
+convert$2.apple.rgb = function (apple) {
return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
};
-convert$6.rgb.apple = function (rgb) {
+convert$2.rgb.apple = function (rgb) {
return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
};
-convert$6.gray.rgb = function (args) {
+convert$2.gray.rgb = function (args) {
return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
};
-convert$6.gray.hsl = convert$6.gray.hsv = function (args) {
+convert$2.gray.hsl = convert$2.gray.hsv = function (args) {
return [0, 0, args[0]];
};
-convert$6.gray.hwb = function (gray) {
+convert$2.gray.hwb = function (gray) {
return [0, 100, gray[0]];
};
-convert$6.gray.cmyk = function (gray) {
+convert$2.gray.cmyk = function (gray) {
return [0, 0, 0, gray[0]];
};
-convert$6.gray.lab = function (gray) {
+convert$2.gray.lab = function (gray) {
return [gray[0], 0, 0];
};
-convert$6.gray.hex = function (gray) {
+convert$2.gray.hex = function (gray) {
var val = Math.round(gray[0] / 100 * 255) & 0xFF;
var integer = (val << 16) + (val << 8) + val;
@@ -5692,12 +14042,12 @@ convert$6.gray.hex = function (gray) {
return '000000'.substring(string.length) + string;
};
-convert$6.rgb.gray = function (rgb) {
+convert$2.rgb.gray = function (rgb) {
var val = (rgb[0] + rgb[1] + rgb[2]) / 3;
return [val / 255 * 100];
};
-var conversions$4 = conversions$5.exports;
+var conversions$1 = conversions$2.exports;
/*
this function routes a model to all other models.
@@ -5710,10 +14060,10 @@ var conversions$4 = conversions$5.exports;
conversions that are not possible simply are not included.
*/
-function buildGraph$1() {
+function buildGraph() {
var graph = {};
// https://jsperf.com/object-keys-vs-for-in-with-closure/3
- var models = Object.keys(conversions$4);
+ var models = Object.keys(conversions$1);
for (var len = models.length, i = 0; i < len; i++) {
graph[models[i]] = {
@@ -5728,15 +14078,15 @@ function buildGraph$1() {
}
// https://en.wikipedia.org/wiki/Breadth-first_search
-function deriveBFS$1(fromModel) {
- var graph = buildGraph$1();
+function deriveBFS(fromModel) {
+ var graph = buildGraph();
var queue = [fromModel]; // unshift -> queue -> pop
graph[fromModel].distance = 0;
while (queue.length) {
var current = queue.pop();
- var adjacents = Object.keys(conversions$4[current]);
+ var adjacents = Object.keys(conversions$1[current]);
for (var len = adjacents.length, i = 0; i < len; i++) {
var adjacent = adjacents[i];
@@ -5753,20 +14103,20 @@ function deriveBFS$1(fromModel) {
return graph;
}
-function link$2(from, to) {
+function link$1(from, to) {
return function (args) {
return to(from(args));
};
}
-function wrapConversion$1(toModel, graph) {
+function wrapConversion(toModel, graph) {
var path = [graph[toModel].parent, toModel];
- var fn = conversions$4[graph[toModel].parent][toModel];
+ var fn = conversions$1[graph[toModel].parent][toModel];
var cur = graph[toModel].parent;
while (graph[cur].parent) {
path.unshift(graph[cur].parent);
- fn = link$2(conversions$4[graph[cur].parent][cur], fn);
+ fn = link$1(conversions$1[graph[cur].parent][cur], fn);
cur = graph[cur].parent;
}
@@ -5774,8 +14124,8 @@ function wrapConversion$1(toModel, graph) {
return fn;
}
-var route$3 = function (fromModel) {
- var graph = deriveBFS$1(fromModel);
+var route$1 = function (fromModel) {
+ var graph = deriveBFS(fromModel);
var conversion = {};
var models = Object.keys(graph);
@@ -5788,20 +14138,20 @@ var route$3 = function (fromModel) {
continue;
}
- conversion[toModel] = wrapConversion$1(toModel, graph);
+ conversion[toModel] = wrapConversion(toModel, graph);
}
return conversion;
};
-var conversions$3 = conversions$5.exports;
-var route$2 = route$3;
+var conversions = conversions$2.exports;
+var route = route$1;
-var convert$5 = {};
+var convert$1 = {};
-var models$4 = Object.keys(conversions$3);
+var models = Object.keys(conversions);
-function wrapRaw$1(fn) {
+function wrapRaw(fn) {
var wrappedFn = function (args) {
if (args === undefined || args === null) {
return args;
@@ -5822,7 +14172,7 @@ function wrapRaw$1(fn) {
return wrappedFn;
}
-function wrapRounded$1(fn) {
+function wrapRounded(fn) {
var wrappedFn = function (args) {
if (args === undefined || args === null) {
return args;
@@ -5854,40 +14204,40 @@ function wrapRounded$1(fn) {
return wrappedFn;
}
-models$4.forEach(function (fromModel) {
- convert$5[fromModel] = {};
+models.forEach(function (fromModel) {
+ convert$1[fromModel] = {};
- Object.defineProperty(convert$5[fromModel], 'channels', {value: conversions$3[fromModel].channels});
- Object.defineProperty(convert$5[fromModel], 'labels', {value: conversions$3[fromModel].labels});
+ Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels});
+ Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels});
- var routes = route$2(fromModel);
+ var routes = route(fromModel);
var routeModels = Object.keys(routes);
routeModels.forEach(function (toModel) {
var fn = routes[toModel];
- convert$5[fromModel][toModel] = wrapRounded$1(fn);
- convert$5[fromModel][toModel].raw = wrapRaw$1(fn);
+ convert$1[fromModel][toModel] = wrapRounded(fn);
+ convert$1[fromModel][toModel].raw = wrapRaw(fn);
});
});
-var colorConvert$1 = convert$5;
+var colorConvert = convert$1;
(function (module) {
-const colorConvert = colorConvert$1;
+const colorConvert$1 = colorConvert;
const wrapAnsi16 = (fn, offset) => function () {
- const code = fn.apply(colorConvert, arguments);
+ const code = fn.apply(colorConvert$1, arguments);
return `\u001B[${code + offset}m`;
};
const wrapAnsi256 = (fn, offset) => function () {
- const code = fn.apply(colorConvert, arguments);
+ const code = fn.apply(colorConvert$1, arguments);
return `\u001B[${38 + offset};5;${code}m`;
};
const wrapAnsi16m = (fn, offset) => function () {
- const rgb = fn.apply(colorConvert, arguments);
+ const rgb = fn.apply(colorConvert$1, arguments);
return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
};
@@ -6003,12 +14353,12 @@ function assembleStyles() {
rgb: wrapAnsi16m(rgb2rgb, 10)
};
- for (let key of Object.keys(colorConvert)) {
- if (typeof colorConvert[key] !== 'object') {
+ for (let key of Object.keys(colorConvert$1)) {
+ if (typeof colorConvert$1[key] !== 'object') {
continue;
}
- const suite = colorConvert[key];
+ const suite = colorConvert$1[key];
if (key === 'ansi16') {
key = 'ansi';
@@ -6038,9 +14388,9 @@ Object.defineProperty(module, 'exports', {
enumerable: true,
get: assembleStyles
});
-}(ansiStyles$2));
+}(ansiStyles));
-var hasFlag$5 = (flag, argv) => {
+var hasFlag$2 = (flag, argv) => {
argv = argv || process.argv;
const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
const pos = argv.indexOf(prefix + flag);
@@ -6048,27 +14398,27 @@ var hasFlag$5 = (flag, argv) => {
return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);
};
-const os$3 = require$$0__default$1['default'];
-const hasFlag$4 = hasFlag$5;
+const os$1 = require$$0$2;
+const hasFlag$1 = hasFlag$2;
-const env$2 = process.env;
+const env$1 = 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;
+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$2) {
- forceColor$2 = env$2.FORCE_COLOR.length === 0 || parseInt(env$2.FORCE_COLOR, 10) !== 0;
+if ('FORCE_COLOR' in env$1) {
+ forceColor = env$1.FORCE_COLOR.length === 0 || parseInt(env$1.FORCE_COLOR, 10) !== 0;
}
-function translateLevel$2(level) {
+function translateLevel$1(level) {
if (level === 0) {
return false;
}
@@ -6081,26 +14431,26 @@ function translateLevel$2(level) {
};
}
-function supportsColor$2(stream) {
- if (forceColor$2 === false) {
+function supportsColor$1(stream) {
+ if (forceColor === false) {
return 0;
}
- if (hasFlag$4('color=16m') ||
- hasFlag$4('color=full') ||
- hasFlag$4('color=truecolor')) {
+ if (hasFlag$1('color=16m') ||
+ hasFlag$1('color=full') ||
+ hasFlag$1('color=truecolor')) {
return 3;
}
- if (hasFlag$4('color=256')) {
+ if (hasFlag$1('color=256')) {
return 2;
}
- if (stream && !stream.isTTY && forceColor$2 !== true) {
+ if (stream && !stream.isTTY && forceColor !== true) {
return 0;
}
- const min = forceColor$2 ? 1 : 0;
+ const min = forceColor ? 1 : 0;
if (process.platform === 'win32') {
// Node.js 7.5.0 is the first version of Node.js to include a patch to
@@ -6109,7 +14459,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$3.release().split('.');
+ const osRelease = os$1.release().split('.');
if (
Number(process.versions.node.split('.')[0]) >= 8 &&
Number(osRelease[0]) >= 10 &&
@@ -6121,26 +14471,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$1) {
+ if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env$1) || env$1.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$1) {
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$1.TEAMCITY_VERSION) ? 1 : 0;
}
- if (env$2.COLORTERM === 'truecolor') {
+ if (env$1.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$1) {
+ const version = parseInt((env$1.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
- switch (env$2.TERM_PROGRAM) {
+ switch (env$1.TERM_PROGRAM) {
case 'iTerm.app':
return version >= 3 ? 3 : 2;
case 'Apple_Terminal':
@@ -6149,42 +14499,42 @@ function supportsColor$2(stream) {
}
}
- if (/-256(color)?$/i.test(env$2.TERM)) {
+ if (/-256(color)?$/i.test(env$1.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$1.TERM)) {
return 1;
}
- if ('COLORTERM' in env$2) {
+ if ('COLORTERM' in env$1) {
return 1;
}
- if (env$2.TERM === 'dumb') {
+ if (env$1.TERM === 'dumb') {
return min;
}
return min;
}
-function getSupportLevel$2(stream) {
- const level = supportsColor$2(stream);
- return translateLevel$2(level);
+function getSupportLevel(stream) {
+ const level = supportsColor$1(stream);
+ return translateLevel$1(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)
};
-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 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 ESCAPES$1 = new Map([
+const ESCAPES = new Map([
['n', '\n'],
['r', '\r'],
['t', '\t'],
@@ -6197,15 +14547,15 @@ const ESCAPES$1 = new Map([
['a', '\u0007']
]);
-function unescape$1(c) {
+function unescape(c) {
if ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
return String.fromCharCode(parseInt(c.slice(1), 16));
}
- return ESCAPES$1.get(c) || c;
+ return ESCAPES.get(c) || c;
}
-function parseArguments$1(name, args) {
+function parseArguments(name, args) {
const results = [];
const chunks = args.trim().split(/\s*,\s*/g);
let matches;
@@ -6213,8 +14563,8 @@ function parseArguments$1(name, args) {
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 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}')`);
}
@@ -6223,17 +14573,17 @@ function parseArguments$1(name, args) {
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]);
@@ -6243,7 +14593,7 @@ function parseStyle$1(style) {
return results;
}
-function buildStyle$1(chalk, styles) {
+function buildStyle(chalk, styles) {
const enabled = {};
for (const layer of styles) {
@@ -6270,26 +14620,26 @@ function buildStyle$1(chalk, styles) {
return current;
}
-var templates$1 = (chalk, tmp) => {
+var templates = (chalk, tmp) => {
const styles = [];
const chunks = [];
let chunk = [];
// eslint-disable-next-line max-params
- tmp.replace(TEMPLATE_REGEX$1, (m, escapeChar, inverse, style, close, chr) => {
+ tmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => {
if (escapeChar) {
- chunk.push(unescape$1(escapeChar));
+ chunk.push(unescape(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)});
+ 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');
}
- chunks.push(buildStyle$1(chalk, styles)(chunk.join('')));
+ chunks.push(buildStyle(chalk, styles)(chunk.join('')));
chunk = [];
styles.pop();
} else {
@@ -6308,11 +14658,11 @@ var templates$1 = (chalk, tmp) => {
};
(function (module) {
-const escapeStringRegexp = escapeStringRegexp$3;
-const ansiStyles = ansiStyles$2.exports;
-const stdoutColor = supportsColor_1$2.stdout;
+const escapeStringRegexp = escapeStringRegexp$1;
+const ansiStyles$1 = ansiStyles.exports;
+const stdoutColor = supportsColor_1.stdout;
-const template = templates$1;
+const template = templates;
const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm');
@@ -6358,15 +14708,15 @@ function Chalk(options) {
// Use bright blue on Windows as the normal blue color is illegible
if (isSimpleWindowsTerm) {
- ansiStyles.blue.open = '\u001B[94m';
+ ansiStyles$1.blue.open = '\u001B[94m';
}
-for (const key of Object.keys(ansiStyles)) {
- ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
+for (const key of Object.keys(ansiStyles$1)) {
+ ansiStyles$1[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles$1[key].close), 'g');
styles[key] = {
get() {
- const codes = ansiStyles[key];
+ const codes = ansiStyles$1[key];
return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key);
}
};
@@ -6378,8 +14728,8 @@ styles.visible = {
}
};
-ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g');
-for (const model of Object.keys(ansiStyles.color.ansi)) {
+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;
}
@@ -6388,11 +14738,11 @@ for (const model of Object.keys(ansiStyles.color.ansi)) {
get() {
const level = this.level;
return function () {
- const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments);
+ const open = ansiStyles$1.color[levelMapping[level]][model].apply(null, arguments);
const codes = {
open,
- close: ansiStyles.color.close,
- closeRe: ansiStyles.color.closeRe
+ close: ansiStyles$1.color.close,
+ closeRe: ansiStyles$1.color.closeRe
};
return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);
};
@@ -6400,8 +14750,8 @@ for (const model of Object.keys(ansiStyles.color.ansi)) {
};
}
-ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g');
-for (const model of Object.keys(ansiStyles.bgColor.ansi)) {
+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;
}
@@ -6411,11 +14761,11 @@ for (const model of Object.keys(ansiStyles.bgColor.ansi)) {
get() {
const level = this.level;
return function () {
- const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments);
+ const open = ansiStyles$1.bgColor[levelMapping[level]][model].apply(null, arguments);
const codes = {
open,
- close: ansiStyles.bgColor.close,
- closeRe: ansiStyles.bgColor.closeRe
+ close: ansiStyles$1.bgColor.close,
+ closeRe: ansiStyles$1.bgColor.closeRe
};
return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);
};
@@ -6489,9 +14839,9 @@ function applyStyle() {
// 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;
+ const originalDim = ansiStyles$1.dim.open;
if (isSimpleWindowsTerm && this.hasGrey) {
- ansiStyles.dim.open = '';
+ ansiStyles$1.dim.open = '';
}
for (const code of this._styles.slice().reverse()) {
@@ -6507,7 +14857,7 @@ function applyStyle() {
}
// Reset the original `dim` if we changed it to work around the Windows dimmed gray issue
- ansiStyles.dim.open = originalDim;
+ ansiStyles$1.dim.open = originalDim;
return str;
}
@@ -6535,20 +14885,20 @@ Object.defineProperties(Chalk.prototype, styles);
module.exports = Chalk(); // eslint-disable-line new-cap
module.exports.supportsColor = stdoutColor;
module.exports.default = module.exports; // For TypeScript
-}(chalk$2));
+}(chalk));
-Object.defineProperty(lib$8, "__esModule", {
+Object.defineProperty(lib$3, "__esModule", {
value: true
});
-lib$8.shouldHighlight = shouldHighlight;
-lib$8.getChalk = getChalk;
-lib$8.default = highlight;
+lib$3.shouldHighlight = shouldHighlight;
+lib$3.getChalk = getChalk;
+lib$3.default = highlight;
var _jsTokens = jsTokens;
-var _helperValidatorIdentifier = lib$7;
+var _helperValidatorIdentifier = lib$2;
-var _chalk = chalk$2.exports;
+var _chalk = chalk.exports;
const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]);
@@ -6568,7 +14918,7 @@ function getDefs$1(chalk) {
const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/;
const BRACKET = /^[()[\]{}]$/;
-let tokenize$3;
+let tokenize;
{
const JSX_TAG = /^[a-z][\w-]*$/i;
@@ -6598,7 +14948,7 @@ let tokenize$3;
return token.type;
};
- tokenize$3 = function* (text) {
+ tokenize = function* (text) {
let match;
while (match = _jsTokens.default.exec(text)) {
@@ -6618,7 +14968,7 @@ function highlightTokens(defs, text) {
for (const {
type,
value
- } of tokenize$3(text)) {
+ } of tokenize(text)) {
const colorize = defs[type];
if (colorize) {
@@ -6652,13 +15002,13 @@ function highlight(code, options = {}) {
}
}
-Object.defineProperty(lib$9, "__esModule", {
+Object.defineProperty(lib$4, "__esModule", {
value: true
});
-lib$9.codeFrameColumns = codeFrameColumns$1;
-lib$9.default = _default$1;
+lib$4.codeFrameColumns = codeFrameColumns$1;
+lib$4.default = _default;
-var _highlight = lib$8;
+var _highlight = lib$3;
let deprecationWarningShown = false;
@@ -6790,7 +15140,7 @@ function codeFrameColumns$1(rawLines, loc, opts = {}) {
}
}
-function _default$1(rawLines, lineNumber, colNumber, opts = {}) {
+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`.";
@@ -6817,7 +15167,7 @@ function _default$1(rawLines, lineNumber, colNumber, opts = {}) {
const errorEx = errorEx_1;
const fallback = jsonParseEvenBetterErrors;
const {default: LinesAndColumns} = require$$2;
-const {codeFrameColumns} = lib$9;
+const {codeFrameColumns} = lib$4;
const JSONError = errorEx('JSONError', {
fileName: errorEx.append('in %s'),
@@ -6901,7 +15251,7 @@ var ms = function(val, options) {
options = options || {};
var type = typeof val;
if (type === 'string' && val.length > 0) {
- return parse$c(val);
+ return parse$a(val);
} else if (type === 'number' && isFinite(val)) {
return options.long ? fmtLong(val) : fmtShort(val);
}
@@ -6919,7 +15269,7 @@ var ms = function(val, options) {
* @api private
*/
-function parse$c(str) {
+function parse$a(str) {
str = String(str);
if (str.length > 100) {
return;
@@ -7307,7 +15657,7 @@ function setup(env) {
return createDebug;
}
-var common$4 = setup;
+var common$3 = setup;
/* eslint-env browser */
@@ -7564,7 +15914,7 @@ function localstorage() {
}
}
-module.exports = common$4(exports);
+module.exports = common$3(exports);
const {formatters} = module.exports;
@@ -7583,155 +15933,13 @@ formatters.j = function (v) {
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$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 ('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);
- }
-}
-
-function translateLevel$1(level) {
- if (level === 0) {
- return false;
- }
-
- return {
- level,
- hasBasic: true,
- has256: level >= 2,
- has16m: level >= 3
- };
-}
-
-function supportsColor$1(haveStream, streamIsTTY) {
- if (forceColor$1 === 0) {
- return 0;
- }
-
- if (hasFlag$2('color=16m') ||
- hasFlag$2('color=full') ||
- hasFlag$2('color=truecolor')) {
- return 3;
- }
-
- if (hasFlag$2('color=256')) {
- return 2;
- }
-
- if (haveStream && !streamIsTTY && forceColor$1 === undefined) {
- return 0;
- }
-
- const min = forceColor$1 || 0;
-
- if (env$1.TERM === 'dumb') {
- return min;
- }
-
- 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;
- }
-
- return 1;
- }
-
- 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;
- }
-
- return min;
- }
-
- if ('TEAMCITY_VERSION' in env$1) {
- return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env$1.TEAMCITY_VERSION) ? 1 : 0;
- }
-
- if (env$1.COLORTERM === 'truecolor') {
- return 3;
- }
-
- if ('TERM_PROGRAM' in env$1) {
- const version = parseInt((env$1.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
-
- switch (env$1.TERM_PROGRAM) {
- case 'iTerm.app':
- return version >= 3 ? 3 : 2;
- case 'Apple_Terminal':
- return 2;
- // No default
- }
- }
-
- if (/-256(color)?$/i.test(env$1.TERM)) {
- return 2;
- }
-
- if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env$1.TERM)) {
- return 1;
- }
-
- if ('COLORTERM' in env$1) {
- return 1;
- }
-
- return min;
-}
-
-function getSupportLevel$1(stream) {
- const level = supportsColor$1(stream, stream && stream.isTTY);
- return translateLevel$1(level);
-}
-
-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.
*/
(function (module, exports) {
-const tty = require$$1__default['default'];
-const util = require$$0__default['default'];
+const tty = tty$1;
+const util = require$$0$4;
/**
* This is the Node.js implementation of `debug()`.
@@ -7965,7 +16173,7 @@ function init(debug) {
}
}
-module.exports = common$4(exports);
+module.exports = common$3(exports);
const {formatters} = module.exports;
@@ -8002,54 +16210,4296 @@ if (typeof process === 'undefined' || process.type === 'renderer' || process.bro
src.exports = node.exports;
}
-var resolveFrom$1 = {exports: {}};
+var createDebug = src.exports;
-const path$l = require$$0__default$2['default'];
-const Module = require$$1__default$1['default'];
-const fs$j = require$$0__default$3['default'];
+var re$6 = {exports: {}};
-const resolveFrom = (fromDirectory, moduleId, silent) => {
- if (typeof fromDirectory !== 'string') {
- throw new TypeError(`Expected \`fromDir\` to be of type \`string\`, got \`${typeof fromDirectory}\``);
- }
+// 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 (typeof moduleId !== 'string') {
- throw new TypeError(`Expected \`moduleId\` to be of type \`string\`, got \`${typeof moduleId}\``);
- }
+const MAX_LENGTH$2 = 256;
+const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER ||
+ /* istanbul ignore next */ 9007199254740991;
- try {
- fromDirectory = fs$j.realpathSync(fromDirectory);
- } catch (error) {
- if (error.code === 'ENOENT') {
- fromDirectory = path$l.resolve(fromDirectory);
- } else if (silent) {
- return;
- } else {
- throw error;
- }
- }
+// Max safe segment length for coercion.
+const MAX_SAFE_COMPONENT_LENGTH = 16;
- const fromFile = path$l.join(fromDirectory, 'noop.js');
+var constants = {
+ SEMVER_SPEC_VERSION,
+ MAX_LENGTH: MAX_LENGTH$2,
+ MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,
+ MAX_SAFE_COMPONENT_LENGTH
+};
- const resolveFileName = () => Module._resolveFilename(moduleId, {
- id: fromFile,
- filename: fromFile,
- paths: Module._nodeModulePaths(fromDirectory)
- });
+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)
+ : () => {};
- if (silent) {
- try {
- return resolveFileName();
- } catch (error) {
- return;
- }
- }
+var debug_1 = debug$f;
+
+(function (module, exports) {
+const { MAX_SAFE_COMPONENT_LENGTH } = constants;
+const debug = debug_1;
+exports = module.exports = {};
+
+// The actual regexps go on exports.re
+const re = exports.re = [];
+const src = exports.src = [];
+const t = exports.t = {};
+let R = 0;
+
+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);
+};
+
+// The following Regular Expressions can be used for tokenizing,
+// validating, and parsing SemVer version strings.
+
+// ## Numeric Identifier
+// A single `0`, or a non-zero digit followed by zero or more digits.
+
+createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*');
+createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+');
+
+// ## Non-numeric Identifier
+// Zero or more digits, followed by a letter or hyphen, and then zero or
+// more letters, digits, or hyphens.
+
+createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*');
+
+// ## Main Version
+// Three dot-separated numeric identifiers.
+
+createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
+ `(${src[t.NUMERICIDENTIFIER]})\\.` +
+ `(${src[t.NUMERICIDENTIFIER]})`);
+
+createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
+ `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
+ `(${src[t.NUMERICIDENTIFIERLOOSE]})`);
+
+// ## Pre-release Version Identifier
+// A numeric identifier, or a non-numeric identifier.
+
+createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
+}|${src[t.NONNUMERICIDENTIFIER]})`);
+
+createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
+}|${src[t.NONNUMERICIDENTIFIER]})`);
+
+// ## Pre-release Version
+// Hyphen, followed by one or more dot-separated pre-release version
+// identifiers.
+
+createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
+}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
+
+createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
+}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
+
+// ## Build Metadata Identifier
+// Any combination of digits, letters, or hyphens.
+
+createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+');
+
+// ## Build Metadata
+// Plus sign, followed by one or more period-separated build metadata
+// identifiers.
+
+createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
+}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
+
+// ## Full Version String
+// A main version, followed optionally by a pre-release version and
+// build metadata.
+
+// 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.
+
+createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
+}${src[t.PRERELEASE]}?${
+ src[t.BUILD]}?`);
+
+createToken('FULL', `^${src[t.FULLPLAIN]}$`);
+
+// 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]}?`);
+
+createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`);
+
+createToken('GTLT', '((?:<|>)?=?)');
+
+// 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|\\*`);
+
+createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
+ `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
+ `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
+ `(?:${src[t.PRERELEASE]})?${
+ src[t.BUILD]}?` +
+ `)?)?`);
+
+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;
+ }
+
+ return a === b ? 0
+ : (anum && !bnum) ? -1
+ : (bnum && !anum) ? 1
+ : a < b ? -1
+ : 1
+};
+
+const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a);
+
+var identifiers = {
+ compareIdentifiers: compareIdentifiers$1,
+ rcompareIdentifiers
+};
+
+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;
+
+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}`)
+ }
+
+ if (version.length > MAX_LENGTH$1) {
+ throw new TypeError(
+ `version is longer than ${MAX_LENGTH$1} characters`
+ )
+ }
+
+ 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;
+
+ const m = version.trim().match(options.loose ? re$5[t$4.LOOSE] : re$5[t$4.FULL]);
+
+ if (!m) {
+ throw new TypeError(`Invalid Version: ${version}`)
+ }
+
+ this.raw = version;
+
+ // these are actually numbers
+ this.major = +m[1];
+ this.minor = +m[2];
+ this.patch = +m[3];
+
+ if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
+ throw new TypeError('Invalid major version')
+ }
+
+ 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();
+ }
+
+ format () {
+ this.version = `${this.major}.${this.minor}.${this.patch}`;
+ if (this.prerelease.length) {
+ this.version += `-${this.prerelease.join('.')}`;
+ }
+ return this.version
+ }
+
+ toString () {
+ return this.version
+ }
+
+ 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 (other.version === this.version) {
+ return 0
+ }
+
+ return this.compareMain(other) || this.comparePre(other)
+ }
+
+ compareMain (other) {
+ if (!(other instanceof SemVer$e)) {
+ other = new SemVer$e(other, this.options);
+ }
+
+ return (
+ compareIdentifiers(this.major, other.major) ||
+ compareIdentifiers(this.minor, other.minor) ||
+ compareIdentifiers(this.patch, other.patch)
+ )
+ }
+
+ comparePre (other) {
+ if (!(other instanceof SemVer$e)) {
+ other = new SemVer$e(other, this.options);
+ }
+
+ // 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$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)
+ }
+
+ compareBuild (other) {
+ if (!(other instanceof SemVer$e)) {
+ other = new SemVer$e(other, this.options);
+ }
+
+ 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)
+ }
+
+ // 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
+
+ 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
+ }
+}
+
+var semver$2 = SemVer$e;
+
+const {MAX_LENGTH} = constants;
+const { re: re$4, t: t$3 } = re$6.exports;
+const SemVer$d = semver$2;
+
+const parseOptions$2 = parseOptions_1;
+const parse$9 = (version, options) => {
+ options = parseOptions$2(options);
+
+ if (version instanceof SemVer$d) {
+ return version
+ }
+
+ if (typeof version !== 'string') {
+ return null
+ }
+
+ 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
+ }
+};
+
+var parse_1 = parse$9;
+
+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;
+
+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;
+
+const SemVer$c = semver$2;
+
+const inc = (version, release, options, identifier) => {
+ if (typeof (options) === 'string') {
+ identifier = options;
+ options = undefined;
+ }
+
+ try {
+ return new SemVer$c(version, options).inc(release, identifier).version
+ } catch (er) {
+ return null
+ }
+};
+var inc_1 = inc;
+
+const SemVer$b = semver$2;
+const compare$b = (a, b, loose) =>
+ new SemVer$b(a, loose).compare(new SemVer$b(b, loose));
+
+var compare_1 = compare$b;
+
+const compare$a = compare_1;
+const eq$2 = (a, b, loose) => compare$a(a, b, loose) === 0;
+var eq_1 = eq$2;
+
+const parse$6 = parse_1;
+const eq$1 = eq_1;
+
+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;
+
+const SemVer$a = semver$2;
+const major = (a, loose) => new SemVer$a(a, loose).major;
+var major_1 = major;
+
+const SemVer$9 = semver$2;
+const minor = (a, loose) => new SemVer$9(a, loose).minor;
+var minor_1 = minor;
+
+const SemVer$8 = semver$2;
+const patch = (a, loose) => new SemVer$8(a, loose).patch;
+var patch_1 = patch;
+
+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;
+
+const compare$9 = compare_1;
+const rcompare = (a, b, loose) => compare$9(b, a, loose);
+var rcompare_1 = rcompare;
+
+const compare$8 = compare_1;
+const compareLoose = (a, b) => compare$8(a, b, true);
+var compareLoose_1 = compareLoose;
+
+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 compareBuild$1 = compareBuild_1;
+const sort$1 = (list, loose) => list.sort((a, b) => compareBuild$1(a, b, loose));
+var sort_1 = sort$1;
+
+const compareBuild = compareBuild_1;
+const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose));
+var rsort_1 = rsort;
+
+const compare$7 = compare_1;
+const gt$3 = (a, b, loose) => compare$7(a, b, loose) > 0;
+var gt_1 = gt$3;
+
+const compare$6 = compare_1;
+const lt$2 = (a, b, loose) => compare$6(a, b, loose) < 0;
+var lt_1 = lt$2;
+
+const compare$5 = compare_1;
+const neq$1 = (a, b, loose) => compare$5(a, b, loose) !== 0;
+var neq_1 = neq$1;
+
+const compare$4 = compare_1;
+const gte$3 = (a, b, loose) => compare$4(a, b, loose) >= 0;
+var gte_1 = gte$3;
+
+const compare$3 = compare_1;
+const lte$3 = (a, b, loose) => compare$3(a, b, loose) <= 0;
+var lte_1 = lte$3;
+
+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;
+
+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
+
+ case '!==':
+ if (typeof a === 'object')
+ a = a.version;
+ if (typeof b === 'object')
+ b = b.version;
+ return a !== b
+
+ case '':
+ case '=':
+ case '==':
+ return eq(a, b, loose)
+
+ case '!=':
+ return neq(a, b, loose)
+
+ case '>':
+ return gt$2(a, b, loose)
+
+ case '>=':
+ return gte$2(a, b, loose)
+
+ case '<':
+ return lt$1(a, b, loose)
+
+ case '<=':
+ return lte$2(a, b, loose)
+
+ default:
+ throw new TypeError(`Invalid operator: ${op}`)
+ }
+};
+var cmp_1 = cmp$1;
+
+const SemVer$6 = semver$2;
+const parse$4 = parse_1;
+const {re: re$3, t: t$2} = re$6.exports;
+
+const coerce$I = (version, options) => {
+ if (version instanceof SemVer$6) {
+ return version
+ }
+
+ if (typeof version === 'number') {
+ version = String(version);
+ }
+
+ if (typeof version !== 'string') {
+ return null
+ }
+
+ options = options || {};
+
+ 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;
+ }
+
+ if (match === null)
+ return null
+
+ return parse$4(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)
+};
+var coerce_1 = coerce$I;
+
+var iterator = function (Yallist) {
+ Yallist.prototype[Symbol.iterator] = function* () {
+ for (let walker = this.head; walker; walker = walker.next) {
+ yield walker.value;
+ }
+ };
+};
+
+var yallist = Yallist$1;
+
+Yallist$1.Node = Node;
+Yallist$1.create = Yallist$1;
+
+function Yallist$1 (list) {
+ var self = this;
+ if (!(self instanceof Yallist$1)) {
+ self = new Yallist$1();
+ }
+
+ self.tail = null;
+ self.head = null;
+ self.length = 0;
+
+ 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]);
+ }
+ }
+
+ return self
+}
+
+Yallist$1.prototype.removeNode = function (node) {
+ if (node.list !== this) {
+ throw new Error('removing node which does not belong to this list')
+ }
+
+ var next = node.next;
+ var prev = node.prev;
+
+ if (next) {
+ next.prev = prev;
+ }
+
+ if (prev) {
+ prev.next = next;
+ }
+
+ if (node === this.head) {
+ this.head = next;
+ }
+ if (node === this.tail) {
+ this.tail = prev;
+ }
+
+ node.list.length--;
+ node.next = null;
+ node.prev = null;
+ node.list = null;
+
+ return next
+};
+
+Yallist$1.prototype.unshiftNode = function (node) {
+ if (node === this.head) {
+ return
+ }
+
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+
+ var head = this.head;
+ node.list = this;
+ node.next = head;
+ if (head) {
+ head.prev = node;
+ }
+
+ this.head = node;
+ if (!this.tail) {
+ this.tail = node;
+ }
+ this.length++;
+};
+
+Yallist$1.prototype.pushNode = function (node) {
+ if (node === this.tail) {
+ return
+ }
+
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+
+ var tail = this.tail;
+ node.list = this;
+ node.prev = tail;
+ if (tail) {
+ tail.next = node;
+ }
+
+ this.tail = node;
+ if (!this.head) {
+ this.head = node;
+ }
+ this.length++;
+};
+
+Yallist$1.prototype.push = function () {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ push$2(this, arguments[i]);
+ }
+ return this.length
+};
+
+Yallist$1.prototype.unshift = function () {
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ unshift(this, arguments[i]);
+ }
+ return this.length
+};
+
+Yallist$1.prototype.pop = function () {
+ if (!this.tail) {
+ return undefined
+ }
+
+ 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
+};
+
+Yallist$1.prototype.shift = function () {
+ if (!this.head) {
+ return undefined
+ }
+
+ 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
+};
+
+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;
+ }
+};
+
+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;
+ }
+};
+
+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
+ }
+};
+
+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
+ }
+};
+
+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
+};
+
+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
+};
+
+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')
+ }
+
+ for (var i = 0; walker !== null; i++) {
+ acc = fn(acc, walker.value, i);
+ walker = walker.next;
+ }
+
+ return acc
+};
+
+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')
+ }
+
+ for (var i = this.length - 1; walker !== null; i--) {
+ acc = fn(acc, walker.value, i);
+ walker = walker.prev;
+ }
+
+ return acc
+};
+
+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
+};
+
+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
+};
+
+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
+};
+
+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
+};
+
+Yallist$1.prototype.splice = function (start, deleteCount, ...nodes) {
+ if (start > this.length) {
+ start = this.length - 1;
+ }
+ if (start < 0) {
+ start = this.length + start;
+ }
+
+ for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
+ walker = walker.next;
+ }
+
+ var ret = [];
+ for (var i = 0; walker && i < deleteCount; i++) {
+ ret.push(walker.value);
+ walker = this.removeNode(walker);
+ }
+ if (walker === null) {
+ walker = this.tail;
+ }
+
+ if (walker !== this.head && walker !== this.tail) {
+ walker = walker.prev;
+ }
+
+ for (var i = 0; i < nodes.length; i++) {
+ walker = insert(this, walker, nodes[i]);
+ }
+ return ret;
+};
+
+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
+};
+
+function insert (self, node, value) {
+ var inserted = node === self.head ?
+ new Node(value, null, node, self) :
+ new Node(value, node, node.next, self);
+
+ if (inserted.next === null) {
+ self.tail = inserted;
+ }
+ if (inserted.prev === null) {
+ self.head = inserted;
+ }
+
+ self.length++;
+
+ return inserted
+}
+
+function push$2 (self, item) {
+ self.tail = new Node(item, self.tail, null, self);
+ if (!self.head) {
+ self.head = self.tail;
+ }
+ self.length++;
+}
+
+function unshift (self, item) {
+ self.head = new Node(item, null, self.head, self);
+ if (!self.tail) {
+ self.tail = self.head;
+ }
+ self.length++;
+}
+
+function Node (value, prev, next, list) {
+ if (!(this instanceof Node)) {
+ return new Node(value, prev, next, list)
+ }
+
+ this.list = list;
+ this.value = value;
+
+ if (prev) {
+ prev.next = this;
+ this.prev = prev;
+ } else {
+ this.prev = null;
+ }
+
+ if (next) {
+ next.prev = this;
+ this.next = next;
+ } else {
+ this.next = null;
+ }
+}
+
+try {
+ // add if support for Symbol.iterator is present
+ iterator(Yallist$1);
+} catch (er) {}
+
+// 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 = {};
+
+ 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;
+
+ 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();
+ }
+
+ // 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')
+
+ this[MAX] = mL || Infinity;
+ trim(this);
+ }
+ get max () {
+ return this[MAX]
+ }
+
+ set allowStale (allowStale) {
+ this[ALLOW_STALE] = !!allowStale;
+ }
+ get allowStale () {
+ return this[ALLOW_STALE]
+ }
+
+ set maxAge (mA) {
+ if (typeof mA !== 'number')
+ throw new TypeError('maxAge must be a non-negative number')
+
+ this[MAX_AGE] = mA;
+ trim(this);
+ }
+ get maxAge () {
+ return this[MAX_AGE]
+ }
+
+ // resize the cache when the lengthCalculator changes.
+ set lengthCalculator (lC) {
+ if (typeof lC !== 'function')
+ lC = naiveLength;
+
+ 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] }
+
+ get length () { return this[LENGTH] }
+ get itemCount () { return this[LRU_LIST].length }
+
+ 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;
+ }
+ }
+
+ 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;
+ }
+ }
+
+ keys () {
+ return this[LRU_LIST].toArray().map(k => k.key)
+ }
+
+ values () {
+ return this[LRU_LIST].toArray().map(k => k.value)
+ }
+
+ reset () {
+ if (this[DISPOSE] &&
+ this[LRU_LIST] &&
+ this[LRU_LIST].length) {
+ this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));
+ }
+
+ 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
+ }
+
+ 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)
+ }
+
+ dumpLru () {
+ return this[LRU_LIST]
+ }
+
+ set (key, value, maxAge) {
+ maxAge = maxAge || this[MAX_AGE];
+
+ if (maxAge && typeof maxAge !== 'number')
+ throw new TypeError('maxAge must be a number')
+
+ const now = maxAge ? Date.now() : 0;
+ const len = this[LENGTH_CALCULATOR](value, key);
+
+ if (this[CACHE].has(key)) {
+ if (len > this[MAX]) {
+ del(this, this[CACHE].get(key));
+ return false
+ }
+
+ const node = this[CACHE].get(key);
+ const item = node.value;
+
+ // 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);
+ }
+
+ item.now = now;
+ item.maxAge = maxAge;
+ item.value = value;
+ this[LENGTH] += len - item.length;
+ item.length = len;
+ this.get(key);
+ trim(this);
+ return true
+ }
+
+ const hit = new Entry(key, value, len, now, maxAge);
+
+ // oversized objects fall out of cache automatically.
+ if (hit.length > this[MAX]) {
+ if (this[DISPOSE])
+ this[DISPOSE](key, value);
+
+ return false
+ }
+
+ 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
+ }
+};
+
+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])
+};
+
+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;
+ }
+ }
+};
+
+const del = (self, node) => {
+ if (node) {
+ const hit = node.value;
+ if (self[DISPOSE])
+ self[DISPOSE](hit.key, hit.value);
+
+ self[LENGTH] -= hit.length;
+ self[CACHE].delete(hit.key);
+ self[LRU_LIST].removeNode(node);
+ }
+};
+
+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);
+};
+
+var lruCache = LRUCache;
+
+// hoisted class for cyclic dependency
+class Range$a {
+ constructor (range, options) {
+ options = parseOptions$1(options);
+
+ if (range instanceof Range$a) {
+ if (
+ range.loose === !!options.loose &&
+ range.includePrerelease === !!options.includePrerelease
+ ) {
+ return range
+ } else {
+ return new Range$a(range.raw, options)
+ }
+ }
+
+ if (range instanceof Comparator$2) {
+ // just put it in the set and return
+ this.raw = range.value;
+ this.set = [[range]];
+ this.format();
+ return this
+ }
+
+ this.options = options;
+ this.loose = !!options.loose;
+ this.includePrerelease = !!options.includePrerelease;
+
+ // 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
+ }
+ }
+ }
+ }
+
+ this.format();
+ }
+
+ format () {
+ this.range = this.set
+ .map((comps) => {
+ return comps.join(' ').trim()
+ })
+ .join('||')
+ .trim();
+ return this.range
+ }
+
+ 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
+ }
+
+ intersects (range, options) {
+ if (!(range instanceof Range$a)) {
+ throw new TypeError('a Range is required')
+ }
+
+ 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 ANY of the sets match ALL of its comparators, then pass
+ test (version) {
+ if (!version) {
+ return false
+ }
+
+ if (typeof version === 'string') {
+ try {
+ version = new SemVer$5(version, this.options);
+ } catch (er) {
+ return false
+ }
+ }
+
+ 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;
+
+const LRU = lruCache;
+const cache$1 = new LRU({ max: 1000 });
+
+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)
+ });
+
+ testComparator = remainingComparators.pop();
+ }
+
+ return result
+};
+
+// 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 (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`;
+ }
+
+ debug$d('tilde return', ret);
+ return ret
+ })
+};
+
+// ^ --> * (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 replaceXRanges = (comp, options) => {
+ debug$d('replaceXRanges', comp, options);
+ return comp.split(/\s+/).map((comp) => {
+ return replaceXRange(comp, options)
+ }).join(' ')
+};
+
+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;
+
+ if (gtlt === '=' && anyX) {
+ gtlt = '';
+ }
+
+ // 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 (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;
+ }
+ }
+
+ if (gtlt === '<')
+ pr = '-0';
+
+ 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`;
+ }
+
+ debug$d('xRange return', ret);
+
+ return ret
+ })
+};
+
+// 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}`;
+ }
+
+ return (`${from} ${to}`).trim()
+};
+
+const testSet = (set, version, options) => {
+ for (let i = 0; i < set.length; i++) {
+ if (!set[i].test(version)) {
+ return false
+ }
+ }
+
+ 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
+ }
+
+ 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
+ }
+ }
+ }
+
+ // Version has a -pre, but it's not one of the ones we like.
+ return false
+ }
+
+ return true
+};
+
+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);
+
+ if (comp instanceof Comparator$1) {
+ if (comp.loose === !!options.loose) {
+ return comp
+ } else {
+ comp = comp.value;
+ }
+ }
+
+ debug$c('comparator', comp, options);
+ this.options = options;
+ this.loose = !!options.loose;
+ this.parse(comp);
+
+ if (this.semver === ANY$2) {
+ this.value = '';
+ } else {
+ this.value = this.operator + this.semver.version;
+ }
+
+ debug$c('comp', this);
+ }
+
+ parse (comp) {
+ const r = this.options.loose ? re$1[t.COMPARATORLOOSE] : re$1[t.COMPARATOR];
+ const m = comp.match(r);
+
+ if (!m) {
+ throw new TypeError(`Invalid comparator: ${comp}`)
+ }
+
+ this.operator = m[1] !== undefined ? m[1] : '';
+ if (this.operator === '=') {
+ this.operator = '';
+ }
+
+ // 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);
+ }
+ }
+
+ toString () {
+ return this.value
+ }
+
+ test (version) {
+ debug$c('Comparator.test', version, this.options.loose);
+
+ if (this.semver === ANY$2 || version === ANY$2) {
+ return true
+ }
+
+ if (typeof version === 'string') {
+ try {
+ version = new SemVer$4(version, this.options);
+ } catch (er) {
+ return false
+ }
+ }
+
+ 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;
+
+const Range$7 = range$1;
+
+// 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(' '));
+
+var toComparators_1 = toComparators;
+
+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;
- return resolveFileName();
+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;
+
+const SemVer$1 = semver$2;
+const Range$4 = range$1;
+const gt$1 = gt_1;
+
+const minVersion = (range, loose) => {
+ range = new Range$4(range, loose);
+
+ let minver = new SemVer$1('0.0.0');
+ if (range.test(minver)) {
+ return minver
+ }
+
+ minver = new SemVer$1('0.0.0-0');
+ if (range.test(minver)) {
+ return minver
+ }
+
+ minver = null;
+ for (let i = 0; i < range.set.length; ++i) {
+ const comparators = range.set[i];
+
+ 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;
+ }
+
+ if (minver && range.test(minver)) {
+ return minver
+ }
+
+ return null
+};
+var minVersion_1 = minVersion;
+
+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 ">"')
+ }
+
+ // If it satisfies the range it is not outside
+ if (satisfies$2(version, range, options)) {
+ return false
+ }
+
+ // From now on, variable terms are as if we're in "gtr" mode.
+ // but note that everything is flipped for the "ltr" function.
+
+ for (let i = 0; i < range.set.length; ++i) {
+ const comparators = range.set[i];
+
+ let high = null;
+ let low = null;
+
+ 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;
+ }
+ });
+
+ // If the edge version comparator has a operator then our version
+ // isn't outside it
+ if (high.operator === comp || high.operator === ecomp) {
+ return false
+ }
+
+ // 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
+};
+
+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
+};
+
+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 simpleSubset = (sub, dom, options) => {
+ if (sub === dom)
+ return true
+
+ if (sub.length === 1 && sub[0].semver === ANY)
+ return dom.length === 1 && dom[0].semver === ANY
+
+ 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 (eqSet.size > 1)
+ return null
+
+ 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
+ }
+
+ // will iterate one or zero times
+ for (const eq of eqSet) {
+ if (gt && !satisfies(eq, String(gt), options))
+ return null
+
+ if (lt && !satisfies(eq, String(lt), options))
+ return null
+
+ for (const c of dom) {
+ if (!satisfies(eq, String(c), options))
+ return false
+ }
+
+ return true
+ }
+
+ 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
+ }
+
+ // 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
+
+ if (lt && hasDomGT && !gt && gtltComp !== 0)
+ return false
+
+ return true
+};
+
+// >=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');
+
+ 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
+};
+
+// Manually “tree shaken” from:
+
+const reader = {read: read$3};
+var packageJsonReader = reader;
+
+/**
+ * @param {string} jsonPath
+ * @returns {{string: string}}
+ */
+function read$3(jsonPath) {
+ return find$1(path$b.dirname(jsonPath))
+}
+
+/**
+ * @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 */
+ }
+
+ throw error
+ }
+}
+
+// Manually “tree shaken” from:
+
+const isWindows$1 = process.platform === 'win32';
+
+const own$e = {}.hasOwnProperty;
+
+const codes = {};
+
+/**
+ * @typedef {(...args: unknown[]) => string} MessageFunction
+ */
+
+/** @type {Map<string, MessageFunction|string>} */
+const messages = new Map();
+const nodeInternalPrefix = '__node_internal_';
+/** @type {number} */
+let userStackTraceLimit;
+
+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
+);
+
+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
+);
+
+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 "./"' : ''}`
+ )
+ }
+
+ 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
+);
+
+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
+);
+
+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
+);
+
+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
+);
+
+codes.ERR_UNSUPPORTED_DIR_IMPORT = createError(
+ 'ERR_UNSUPPORTED_DIR_IMPORT',
+ "Directory import '%s' is not supported " +
+ 'resolving ES modules imported from %s',
+ Error
+);
+
+codes.ERR_UNKNOWN_FILE_EXTENSION = createError(
+ 'ERR_UNKNOWN_FILE_EXTENSION',
+ 'Unknown file extension "%s" for %s',
+ TypeError
+);
+
+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);
+
+ if (inspected.length > 128) {
+ inspected = `${inspected.slice(0, 128)}...`;
+ }
+
+ const type = name.includes('.') ? 'property' : 'argument';
+
+ 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)
+}
+
+/**
+ * @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
+ }
+}
+
+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;
+ }
+ }
+);
+
+/**
+ * @returns {boolean}
+ */
+function isErrorStackTraceLimitWritable() {
+ const desc = Object.getOwnPropertyDescriptor(Error, 'stackTraceLimit');
+ if (desc === undefined) {
+ return Object.isExtensible(Error)
+ }
+
+ return own$e.call(desc, 'writable') ? desc.writable : desc.set !== undefined
+}
+
+/**
+ * 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 captureLargerStackTrace = hideStackFrames(
+ /**
+ * @param {Error} error
+ * @returns {Error}
+ */
+ function (error) {
+ const stackTraceLimitIsWritable = isErrorStackTraceLimitWritable();
+ if (stackTraceLimitIsWritable) {
+ userStackTraceLimit = Error.stackTraceLimit;
+ Error.stackTraceLimit = Number.POSITIVE_INFINITY;
+ }
+
+ Error.captureStackTrace(error);
+
+ // Reset the limit
+ if (stackTraceLimitIsWritable) Error.stackTraceLimit = userStackTraceLimit;
+
+ return error
+ }
+);
+
+/**
+ * @param {string} key
+ * @param {unknown[]} args
+ * @param {Error} self
+ * @returns {string}
+ */
+function getMessage(key, args, self) {
+ const message = messages.get(key);
+
+ 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)
+ }
+
+ 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
+
+ args.unshift(message);
+ return Reflect.apply(format$2, null, args)
+}
+
+// Manually “tree shaken” from:
+
+const {ERR_UNKNOWN_FILE_EXTENSION} = codes;
+
+const extensionFormatMap = {
+ __proto__: null,
+ '.cjs': 'commonjs',
+ '.js': 'module',
+ '.mjs': 'module'
+};
+
+/**
+ * @param {string} url
+ * @returns {{format: string|null}}
+ */
+function defaultGetFormat(url) {
+ if (url.startsWith('node:')) {
+ return {format: 'builtin'}
+ }
+
+ const parsed = new URL$1(url);
+
+ if (parsed.protocol === 'data:') {
+ const {1: mime} = /^([^/]+\/[^;,]+)[^,]*?(;base64)?,/.exec(
+ parsed.pathname
+ ) || [null, null];
+ const format = mime === 'text/javascript' ? 'module' : null;
+ return {format}
+ }
+
+ 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];
+ }
+
+ if (!format) {
+ throw new ERR_UNKNOWN_FILE_EXTENSION(ext, fileURLToPath(url))
+ }
+
+ return {format: format || null}
+ }
+
+ return {format: null}
+}
+
+// Manually “tree shaken” from:
+
+const listOfBuiltins = builtins();
+
+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<string>} */
+const emittedPackageWarnings = new Set();
+/** @type {Map<string, PackageConfig>} */
+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'
+ );
+}
+
+/**
+ * @param {URL} url
+ * @param {URL} packageJsonUrl
+ * @param {URL} base
+ * @param {unknown} [main]
+ * @returns {void}
+ */
+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'
+ );
+}
+
+/**
+ * @param {string[]} [conditions]
+ * @returns {Set<string>}
+ */
+function getConditionsSet(conditions) {
+ if (conditions !== undefined && conditions !== DEFAULT_CONDITIONS) {
+ if (!Array.isArray(conditions)) {
+ throw new ERR_INVALID_ARG_VALUE(
+ 'conditions',
+ conditions,
+ 'expected an array'
+ )
+ }
+
+ return new Set(conditions)
+ }
+
+ return DEFAULT_CONDITIONS_SET
+}
+
+/**
+ * @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()
+ }
+}
+
+/**
+ * @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
+ }
+
+ /** @type {Object.<string, unknown>} */
+ let packageJson;
+ try {
+ packageJson = JSON.parse(source);
+ } catch (error) {
+ throw new ERR_INVALID_PACKAGE_CONFIG(
+ path,
+ (base ? `"${specifier}" from ` : '') + fileURLToPath(base || specifier),
+ error.message
+ )
+ }
+
+ const {exports, imports, main, name, type} = packageJson;
+
+ /** @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.<string, unknown>`.
+ exports,
+ // @ts-expect-error Assume `Object.<string, unknown>`.
+ imports: imports && typeof imports === 'object' ? imports : undefined
+ };
+ packageJsonCache.set(path, packageConfig);
+ return packageConfig
+}
+
+/**
+ * @param {URL|string} resolved
+ * @returns {PackageConfig}
+ */
+function getPackageScopeConfig(resolved) {
+ let packageJsonUrl = new URL$1('./package.json', resolved);
+
+ while (true) {
+ const packageJsonPath = packageJsonUrl.pathname;
+
+ if (packageJsonPath.endsWith('node_modules/package.json')) break
+
+ 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
+}
+
+/**
+ * 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.
+ }
+
+ const tries = ['./index.js', './index.json', './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
+ }
+
+ // Not found.
+ throw new ERR_MODULE_NOT_FOUND(
+ fileURLToPath(new URL$1('.', packageJsonUrl)),
+ fileURLToPath(base)
+ )
+}
+
+/**
+ * @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)
+ )
+
+ const path = fileURLToPath(resolved);
+
+ const stats = tryStatSync(path.endsWith('/') ? path.slice(-1) : path);
+
+ 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
+ }
+
+ if (!stats.isFile()) {
+ throw new ERR_MODULE_NOT_FOUND(
+ path || resolved.pathname,
+ base && fileURLToPath(base),
+ 'module'
+ )
+ }
+
+ return resolved
+}
+
+/**
+ * @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)
+ )
+}
+
+/**
+ * @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)
+ )
+}
+
+/**
+ * @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)}`;
+
+ throw new ERR_INVALID_MODULE_SPECIFIER(
+ subpath,
+ reason,
+ base && fileURLToPath(base)
+ )
+}
+
+/**
+ * @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)
+ )
+}
+
+/**
+ * @param {string} target
+ * @param {string} subpath
+ * @param {string} match
+ * @param {URL} packageJsonUrl
+ * @param {URL} base
+ * @param {boolean} pattern
+ * @param {boolean} internal
+ * @param {Set<string>} 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);
+
+ if (!target.startsWith('./')) {
+ if (internal && !target.startsWith('../') && !target.startsWith('/')) {
+ let isURL = false;
+
+ try {
+ new URL$1(target);
+ isURL = true;
+ } catch {}
+
+ if (!isURL) {
+ const exportTarget = pattern
+ ? target.replace(patternRegEx, subpath)
+ : target + subpath;
+
+ return packageResolve(exportTarget, packageJsonUrl, conditions)
+ }
+ }
+
+ throwInvalidPackageTarget(match, target, packageJsonUrl, internal, base);
+ }
+
+ if (invalidSegmentRegEx.test(target.slice(2)))
+ throwInvalidPackageTarget(match, target, packageJsonUrl, internal, base);
+
+ const resolved = new URL$1(target, packageJsonUrl);
+ const resolvedPath = resolved.pathname;
+ const packagePath = new URL$1('.', packageJsonUrl).pathname;
+
+ if (!resolvedPath.startsWith(packagePath))
+ throwInvalidPackageTarget(match, target, packageJsonUrl, internal, base);
+
+ if (subpath === '') return resolved
+
+ if (invalidSegmentRegEx.test(subpath))
+ throwInvalidSubpath(match + subpath, packageJsonUrl, internal, base);
+
+ if (pattern) return new URL$1(resolved.href.replace(patternRegEx, subpath))
+ return new URL$1(subpath, resolved)
+}
+
+/**
+ * @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<string>} 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
+ )
+ }
+
+ if (Array.isArray(target)) {
+ /** @type {unknown[]} */
+ const targetList = target;
+ if (targetList.length === 0) return null
+
+ /** @type {Error} */
+ let lastException;
+ let i = -1;
+
+ 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 (resolved === undefined) continue
+
+ if (resolved === null) {
+ lastException = null;
+ continue
+ }
+
+ return resolved
+ }
+
+ if (lastException === undefined || lastException === null) {
+ // @ts-expect-error The diff between `undefined` and `null` seems to be
+ // intentional
+ return lastException
+ }
+
+ 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.'
+ )
+ }
+ }
+
+ 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
+ }
+ }
+
+ return undefined
+ }
+
+ if (target === null) {
+ return null
+ }
+
+ throwInvalidPackageTarget(
+ packageSubpath,
+ target,
+ packageJsonUrl,
+ internal,
+ base
+ );
+}
+
+/**
+ * @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
+
+ 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.'
+ )
+ }
+ }
+
+ return isConditionalSugar
+}
+
+/**
+ * @param {URL} packageJsonUrl
+ * @param {string} packageSubpath
+ * @param {Object.<string, unknown>} packageConfig
+ * @param {URL} base
+ * @param {Set<string>} 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}
+ }
+
+ let bestMatch = '';
+ const keys = Object.getOwnPropertyNames(exports);
+ let i = -1;
+
+ 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}
+ }
+
+ throwExportsNotFound(packageSubpath, packageJsonUrl, base);
+}
-resolveFrom$1.exports = (fromDirectory, moduleId) => resolveFrom(fromDirectory, moduleId);
-resolveFrom$1.exports.silent = (fromDirectory, moduleId) => resolveFrom(fromDirectory, moduleId, true);
+/**
+ * @param {string} name
+ * @param {URL} base
+ * @param {Set<string>} [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;
+
+ while (++i < keys.length) {
+ const key = keys[i];
+
+ 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 (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}
+ }
+ }
+ }
+ }
+ }
+
+ throwImportNotDefined(name, packageJsonUrl, base);
+}
+
+/**
+ * @param {string} url
+ * @returns {PackageType}
+ */
+function getPackageType(url) {
+ const packageConfig = getPackageScopeConfig(url);
+ return packageConfig.type
+}
+
+/**
+ * @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);
+ }
+ }
+
+ const packageName =
+ separatorIndex === -1 ? specifier : specifier.slice(0, separatorIndex);
+
+ // 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 (!validPackageName) {
+ throw new ERR_INVALID_MODULE_SPECIFIER(
+ specifier,
+ 'is not a valid package name',
+ fileURLToPath(base)
+ )
+ }
+
+ const packageSubpath =
+ '.' + (separatorIndex === -1 ? '' : specifier.slice(separatorIndex));
+
+ return {packageName, packageSubpath, isScoped}
+}
+
+/**
+ * @param {string} specifier
+ * @param {URL} base
+ * @param {Set<string>} conditions
+ * @returns {URL}
+ */
+function packageResolve(specifier, base, conditions) {
+ const {packageName, packageSubpath, isScoped} = parsePackageName(
+ specifier,
+ base
+ );
+
+ // ResolveSelf
+ const packageConfig = getPackageScopeConfig(base);
+
+ // 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
+ }
+ }
+
+ 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
+ }
+
+ // 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)
+
+ throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base))
+}
+
+/**
+ * @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 false
+}
+
+/**
+ * @param {string} specifier
+ * @returns {boolean}
+ */
+function shouldBeTreatedAsRelativeOrAbsolutePath(specifier) {
+ if (specifier === '') return false
+ if (specifier[0] === '/') return true
+ return isRelativeSpecifier(specifier)
+}
+
+/**
+ * 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<string>} [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;
+
+ 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 finalizeResolution(resolved, base)
+}
+
+/**
+ * @param {string} specifier
+ * @param {{parentURL?: string, conditions?: string[]}} context
+ * @returns {{url: string}}
+ */
+function defaultResolve(specifier, context = {}) {
+ const {parentURL} = context;
+ /** @type {URL} */
+ let parsed;
+
+ try {
+ parsed = new URL$1(specifier);
+ if (parsed.protocol === 'data:') {
+ return {url: specifier}
+ }
+ } catch {}
+
+ if (parsed && parsed.protocol === 'node:') return {url: specifier}
+ if (parsed && parsed.protocol !== 'file:' && parsed.protocol !== 'data:')
+ throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed)
+
+ if (listOfBuiltins.includes(specifier)) {
+ return {url: 'node:' + specifier}
+ }
+
+ if (parentURL.startsWith('data:')) {
+ // This is gonna blow up, we want the error
+ new URL$1(specifier, parentURL);
+ }
+
+ const conditions = getConditionsSet(context.conditions);
+ let url = moduleResolve(specifier, new URL$1(parentURL), conditions);
+
+ 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;
+
+ return {url: `${url}`}
+}
+
+/**
+ * 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<string>}
+ */
+async function resolve(specifier, parent) {
+ if (!parent) {
+ throw new Error(
+ 'Please pass `parent`: `import-meta-resolve` cannot ponyfill that'
+ )
+ }
+
+ try {
+ return defaultResolve(specifier, {parentURL: parent}).url
+ } catch (error) {
+ return error.code === 'ERR_UNSUPPORTED_DIR_IMPORT'
+ ? error.url
+ : Promise.reject(error)
+ }
+}
var libnpmconfig = {};
@@ -8134,7 +20584,7 @@ class FiggyPudding {
}
}
try {
- const util = require$$0__default['default'];
+ const util = require$$0$4;
FiggyPudding.prototype[util.inspect.custom] = function (depth, opts) {
return (
this[Symbol.toStringTag] + ' '
@@ -8249,23 +20699,23 @@ function entries (obj) {
return Object.keys(obj).map(k => [k, obj[k]])
}
-var findUp$2 = {exports: {}};
+var findUp$1 = {exports: {}};
var locatePath$1 = {exports: {}};
var pathExists$1 = {exports: {}};
-const fs$i = require$$0__default$3['default'];
+const fs$5 = require$$0$3;
pathExists$1.exports = fp => new Promise(resolve => {
- fs$i.access(fp, err => {
+ fs$5.access(fp, err => {
resolve(!err);
});
});
pathExists$1.exports.sync = fp => {
try {
- fs$i.accessSync(fp);
+ fs$5.accessSync(fp);
return true;
} catch (err) {
return false;
@@ -8375,7 +20825,7 @@ var pLocate$1 = (iterable, tester, opts) => {
.catch(err => err instanceof EndError ? err.value : Promise.reject(err));
};
-const path$k = require$$0__default$2['default'];
+const path$7 = path$b;
const pathExists = pathExists$1.exports;
const pLocate = pLocate$1;
@@ -8384,7 +20834,7 @@ locatePath$1.exports = (iterable, options) => {
cwd: process.cwd()
}, options);
- return pLocate(iterable, el => pathExists(path$k.resolve(options.cwd, el)), options);
+ return pLocate(iterable, el => pathExists(path$7.resolve(options.cwd, el)), options);
};
locatePath$1.exports.sync = (iterable, options) => {
@@ -8393,18 +20843,18 @@ locatePath$1.exports.sync = (iterable, options) => {
}, options);
for (const el of iterable) {
- if (pathExists.sync(path$k.resolve(options.cwd, el))) {
+ if (pathExists.sync(path$7.resolve(options.cwd, el))) {
return el;
}
}
};
-const path$j = require$$0__default$2['default'];
+const path$6 = path$b;
const locatePath = locatePath$1.exports;
-findUp$2.exports = (filename, opts = {}) => {
- const startDir = path$j.resolve(opts.cwd || '');
- const {root} = path$j.parse(startDir);
+findUp$1.exports = (filename, opts = {}) => {
+ const startDir = path$6.resolve(opts.cwd || '');
+ const {root} = path$6.parse(startDir);
const filenames = [].concat(filename);
@@ -8412,20 +20862,20 @@ findUp$2.exports = (filename, opts = {}) => {
(function find(dir) {
locatePath(filenames, {cwd: dir}).then(file => {
if (file) {
- resolve(path$j.join(dir, file));
+ resolve(path$6.join(dir, file));
} else if (dir === root) {
resolve(null);
} else {
- find(path$j.dirname(dir));
+ find(path$6.dirname(dir));
}
});
})(startDir);
});
};
-findUp$2.exports.sync = (filename, opts = {}) => {
- let dir = path$j.resolve(opts.cwd || '');
- const {root} = path$j.parse(dir);
+findUp$1.exports.sync = (filename, opts = {}) => {
+ let dir = path$6.resolve(opts.cwd || '');
+ const {root} = path$6.parse(dir);
const filenames = [].concat(filename);
@@ -8434,27 +20884,27 @@ findUp$2.exports.sync = (filename, opts = {}) => {
const file = locatePath.sync(filenames, {cwd: dir});
if (file) {
- return path$j.join(dir, file);
+ return path$6.join(dir, file);
}
if (dir === root) {
return null;
}
- dir = path$j.dirname(dir);
+ dir = path$6.dirname(dir);
}
};
var ini$1 = {};
-ini$1.parse = ini$1.decode = decode$2;
+ini$1.parse = ini$1.decode = decode;
ini$1.stringify = ini$1.encode = encode$1;
-ini$1.safe = safe$8;
+ini$1.safe = safe$1;
ini$1.unsafe = unsafe$1;
-var eol$2 = typeof process !== 'undefined' &&
+var eol$1 = typeof process !== 'undefined' &&
process.platform === 'win32' ? '\r\n' : '\n';
function encode$1 (obj, opt) {
@@ -8477,16 +20927,16 @@ function encode$1 (obj, opt) {
var val = obj[k];
if (val && Array.isArray(val)) {
val.forEach(function (item) {
- out += safe$8(k + '[]') + separator + safe$8(item) + '\n';
+ out += safe$1(k + '[]') + separator + safe$1(item) + '\n';
});
} else if (val && typeof val === 'object')
children.push(k);
else
- out += safe$8(k) + separator + safe$8(val) + eol$2;
+ out += safe$1(k) + separator + safe$1(val) + eol$1;
});
if (opt.section && out.length)
- out = '[' + safe$8(opt.section) + ']' + eol$2 + out;
+ out = '[' + safe$1(opt.section) + ']' + eol$1 + out;
children.forEach(function (k, _, __) {
var nk = dotSplit(k).join('\\.');
@@ -8496,7 +20946,7 @@ function encode$1 (obj, opt) {
whitespace: opt.whitespace,
});
if (out.length && child.length)
- out += eol$2;
+ out += eol$1;
out += child;
});
@@ -8513,7 +20963,7 @@ function dotSplit (str) {
})
}
-function decode$2 (str) {
+function decode (str) {
var out = {};
var p = out;
var section = null;
@@ -8605,7 +21055,7 @@ function isQuoted (val) {
(val.charAt(0) === "'" && val.slice(-1) === "'")
}
-function safe$8 (val) {
+function safe$1 (val) {
return (typeof val !== 'string' ||
val.match(/[=\r\n]/) ||
val.match(/^\[/) ||
@@ -8654,12 +21104,12 @@ function unsafe$1 (val, doUnesc) {
return val
}
-const fs$h = require$$0__default$3['default'];
+const fs$4 = require$$0$3;
const figgyPudding = figgyPudding_1;
-const findUp$1 = findUp$2.exports;
+const findUp = findUp$1.exports;
const ini = ini$1;
-const os$1 = require$$0__default$1['default'];
-const path$i = require$$0__default$2['default'];
+const os = require$$0$2;
+const path$5 = path$b;
const NpmConfig = figgyPudding({}, {
// Open up the pudding object.
@@ -8667,14 +21117,14 @@ const NpmConfig = figgyPudding({}, {
});
const ConfigOpts = figgyPudding({
- cache: { default: path$i.join(os$1.homedir(), '.npm') },
+ cache: { default: path$5.join(os.homedir(), '.npm') },
configNames: { default: ['npmrc', '.npmrc'] },
envPrefix: { default: /^npm_config_/i },
cwd: { default: () => process.cwd() },
globalconfig: {
- default: () => path$i.join(getGlobalPrefix(), 'etc', 'npmrc')
+ default: () => path$5.join(getGlobalPrefix(), 'etc', 'npmrc')
},
- userconfig: { default: path$i.join(os$1.homedir(), '.npmrc') }
+ userconfig: { default: path$5.join(os.homedir(), '.npmrc') }
});
libnpmconfig.read = getNpmConfig;
@@ -8701,7 +21151,7 @@ function getNpmConfig (_opts, _builtin) {
env.globalconfig
);
const global = globalConfPath && maybeReadIni(globalConfPath);
- const projConfPath = findUp$1.sync(builtin.configNames, { cwd: builtin.cwd });
+ const projConfPath = findUp.sync(builtin.configNames, { cwd: builtin.cwd });
let proj = {};
if (projConfPath && projConfPath !== userConfPath) {
proj = maybeReadIni(projConfPath);
@@ -8709,17 +21159,17 @@ function getNpmConfig (_opts, _builtin) {
const newOpts = NpmConfig(builtin, global, user, proj, env, cli);
if (newOpts.cache) {
return newOpts.concat({
- cache: path$i.resolve(
+ cache: path$5.resolve(
(
(cli.cache || env.cache)
? builtin.cwd
: proj.cache
- ? path$i.dirname(projConfPath)
+ ? path$5.dirname(projConfPath)
: user.cache
- ? path$i.dirname(userConfPath)
+ ? path$5.dirname(userConfPath)
: global.cache
- ? path$i.dirname(globalConfPath)
- : path$i.dirname(userConfPath)
+ ? path$5.dirname(globalConfPath)
+ : path$5.dirname(userConfPath)
),
newOpts.cache
)
@@ -8732,7 +21182,7 @@ function getNpmConfig (_opts, _builtin) {
function maybeReadIni (f) {
let txt;
try {
- txt = fs$h.readFileSync(f, 'utf8');
+ txt = fs$4.readFileSync(f, 'utf8');
} catch (err) {
if (err.code === 'ENOENT') {
return ''
@@ -8748,59 +21198,64 @@ function getGlobalPrefix () {
return process.env.PREFIX
} else if (process.platform === 'win32') {
// c:\node\node.exe --> prefix=c:\node\
- return path$i.dirname(process.execPath)
+ return path$5.dirname(process.execPath)
} else {
// /usr/local/bin/node --> prefix=/usr/local
- let pref = path$i.dirname(path$i.dirname(process.execPath));
+ let pref = path$5.dirname(path$5.dirname(process.execPath));
// destdir only is respected on Unix
if (process.env.DESTDIR) {
- pref = path$i.join(process.env.DESTDIR, pref);
+ pref = path$5.join(process.env.DESTDIR, pref);
}
return pref
}
}
-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;
+/**
+ * @typedef ResolveOptions
+ * @property {string} [prefix]
+ * @property {string|string[]} [cwd]
+ * @property {boolean} [global]
+ */
-var electron = process.versions.electron !== undefined;
-var windows = process.platform === 'win32';
+const electron = process.versions.electron !== undefined;
+const windows = process.platform === 'win32';
-var argv = process.argv[1] || /* istanbul ignore next */ '';
-var nvm = process.env.NVM_BIN;
-var appData = process.env.APPDATA;
+const argv = process.argv[1] || /* c8 ignore next */ '';
+const nvm = process.env.NVM_BIN;
+const appData = process.env.APPDATA;
-/* istanbul ignore next */
-var globalsLibrary = windows ? '' : 'lib';
+/* c8 ignore next */
+const globalsLibrary = windows ? '' : 'lib';
-var builtinNpmConfig;
+/** @type {{prefix?: string}} */
+let 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 */
+/* c8 ignore next 4 */
if (windows && appData) {
- builtinNpmConfig = {prefix: path$h.join(appData, 'npm')};
+ builtinNpmConfig = {prefix: path$b.join(appData, 'npm')};
}
-var npmPrefix = readNpmConfig(null, builtinNpmConfig).prefix;
+/**
+ * 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;
// If there is no prefix defined, use the defaults
// See: <https://github.com/eush77/npm-prefix/blob/master/index.js>
-/* istanbul ignore next */
+/* c8 ignore next 5 */
if (!npmPrefix) {
npmPrefix = windows
- ? path$h.dirname(process.execPath)
- : path$h.resolve(process.execPath, '../..');
+ ? path$b.dirname(process.execPath)
+ : path$b.resolve(process.execPath, '../..');
}
-var globally = electron || argv.indexOf(npmPrefix) === 0;
-var globals = path$h.resolve(npmPrefix, globalsLibrary, 'node_modules');
+const globalsDefault = electron || argv.indexOf(npmPrefix) === 0;
+let globalDir = path$b.resolve(npmPrefix, globalsLibrary, 'node_modules');
// If we’re in Electron, we’re running in a modified Node that cannot really
// install global node modules.
@@ -8810,63 +21265,74 @@ var globals = path$h.resolve(npmPrefix, globalsLibrary, 'node_modules');
// 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');
+/* c8 ignore next 3 */
+if (electron && nvm && !require$$0$3.existsSync(globalDir)) {
+ globalDir = path$b.resolve(nvm, '..', globalsLibrary, 'node_modules');
}
-// Load the plugin found using `resolvePlugin`.
-function loadPlugin$1(name, options) {
- return commonjsRequire(resolvePlugin(name, options) || name)
+/**
+ * Load the plugin found using `resolvePlugin`.
+ *
+ * @param {string} name The name to import.
+ * @param {LoadOptions} [options]
+ * @returns {Promise<unknown>}
+ */
+async function loadPlugin(name, options = {}) {
+ const {key = 'default', ...rest} = options;
+ const fp = await resolvePlugin(name, rest);
+ /** @type {Object.<string, unknown>} */
+ // 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).
-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 = '';
-
- if (global === null || global === undefined) {
- global = globally;
- }
-
- if (cwd && typeof cwd === 'object') {
- sources = cwd.concat();
- } else {
- sources = [cwd || process.cwd()];
- }
+/**
+ * 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.<string>}
+ */
+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 (global) {
- sources.push(globals);
+ if (globals) {
+ sources.push(globalDir);
}
+ let scope = '';
+
// Unprefix module.
if (prefix) {
- prefix = prefix.charAt(prefix.length - 1) === '-' ? prefix : prefix + '-';
-
// Scope?
if (name.charAt(0) === '@') {
- slash = name.indexOf('/');
+ const slash = name.indexOf('/');
// Let’s keep the algorithm simple.
// No need to care if this is a “valid” scope (I think?).
@@ -8885,29 +21351,51 @@ function resolvePlugin(name, options) {
}
}
- length = sources.length;
- index = -1;
+ let index = -1;
+ /** @type {string} */
+ let fp;
- while (++index < length) {
- cwd = sources[index];
- filePath = (plugin && resolve(cwd, plugin)) || resolve(cwd, name);
+ while (++index < sources.length) {
+ fp = plugin && (await attempt(sources[index], plugin));
+ if (fp) return fp
- if (filePath) {
- return filePath
- }
+ fp = await attempt(sources[index], name);
+ if (fp) return fp
}
- return null
+ // 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<string>}
+ */
+ 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;
+ }
+ }
}
-var isPlainObj = value => {
+function isPlainObject$1(value) {
if (Object.prototype.toString.call(value) !== '[object Object]') {
return false;
}
const prototype = Object.getPrototypeOf(value);
return prototype === null || prototype === Object.prototype;
-};
+}
var format$1 = {exports: {}};
@@ -9027,242 +21515,323 @@ var format$1 = {exports: {}};
var formatter = format$1.exports;
-var fault$3 = create$2(Error);
-
-var fault_1 = fault$3;
-
-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);
+// @ts-ignore
-fault$3.create = create$2;
+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)
+});
-// Create a new `EConstructor`, with the formatted `format` as a first argument.
-function create$2(EConstructor) {
- FormattedError.displayName = EConstructor.displayName || EConstructor.name;
+/**
+ * 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;
return FormattedError
- function FormattedError(format) {
- if (format) {
- format = formatter.apply(null, arguments);
- }
-
- return new EConstructor(format)
+ /**
+ * @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)
}
}
-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;
+const debug$b = createDebug('unified-engine:find-up');
-FindUp$2.prototype.load = load$4;
-
-function FindUp$2(options) {
- var self = this;
-
- self.cache = {};
- self.cwd = options.cwd;
- self.detect = options.detect;
- self.names = options.names;
- self.create = options.create;
-
- if (options.filePath) {
- self.givenFilePath = path$g.resolve(options.cwd, options.filePath);
- }
-}
-
-function load$4(filePath, callback) {
- var self = this;
- var givenFile = self.givenFile;
- var parent;
+/**
+ * @template Value
+ */
+class FindUp {
+ /**
+ * @callback Create
+ * @param {Buffer} buf
+ * @param {string} filePath
+ * @returns {Promise<Value|undefined>|Value|undefined}
+ */
- 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);
- }
+ /**
+ * @callback Callback
+ * @param {Error|null} error
+ * @param {Value} [result]
+ * @returns {void}
+ */
- return
- }
+ /**
+ * @typedef Options
+ * @property {string} cwd
+ * @property {string|undefined} filePath
+ * @property {boolean|undefined} [detect]
+ * @property {string[]} names
+ * @property {Create} create
+ */
- if (!self.detect) {
- return callback()
- }
+ /**
+ * @param {Options} options
+ */
+ constructor(options) {
+ /** @type {Record<string, Callback[]|undefined|Error|Value>} */
+ 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;
- filePath = path$g.resolve(self.cwd, filePath);
- parent = path$g.dirname(filePath);
+ /** @type {string|undefined} */
+ this.givenFilePath = options.filePath
+ ? path$c.resolve(options.cwd, options.filePath)
+ : undefined;
- if (parent in self.cache) {
- apply(callback, self.cache[parent]);
- } else {
- self.cache[parent] = [callback];
- find(parent);
+ /* eslint-disable no-unused-expressions */
+ /** @type {Error|Value|Callback[]|undefined} */
+ this.givenFile;
+ /* eslint-enable no-unused-expressions */
}
- function loadGiven(error, buf) {
- var cbs = self.givenFile;
- var result;
-
- 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);
- }
-
- 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
- )
- );
+ /**
+ * @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 {
- debug$d('Read given file `%s`', self.givenFilePath);
- loaded(result);
+ 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);
+ }
+ });
}
+
+ return
}
- function loaded(result) {
- givenFile = result;
- self.givenFile = result;
- applyAll(cbs, result);
+ if (!this.detect) {
+ return callback(null)
}
- }
- function find(directory) {
- var index = -1;
+ filePath = path$c.resolve(this.cwd, filePath);
+ const parent = path$c.dirname(filePath);
- next();
+ if (parent in this.cache) {
+ apply(callback, this.cache[parent]);
+ } else {
+ this.cache[parent] = [callback];
+ find(parent);
+ }
- function next() {
- var parent;
+ /**
+ * @param {string} directory
+ */
+ function find(directory) {
+ let index = -1;
- // 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);
+ next();
- if (directory === parent) {
- debug$d('No files found for `%s`', filePath);
- found();
- } else if (parent in self.cache) {
- apply(found, self.cache[parent]);
+ 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 {
- self.cache[parent] = [found];
- find(parent);
- }
- }
- }
-
- function done(error, buf) {
- var fp = path$g.join(directory, self.names[index]);
+ const parent = path$c.dirname(directory);
- /* istanbul ignore if - Hard to test. */
- if (error) {
- if (error.code === 'ENOENT') {
- return next()
+ 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);
+ }
}
-
- 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);
+ /**
+ * @param {NodeJS.ErrnoException|null} error
+ * @param {Buffer} [buf]
+ * @returns {void}
+ */
+ function done(error, buf) {
+ const fp = path$c.join(directory, self.names[index]);
- function onparse(error, result) {
if (error) {
- found(
- fault$2(
- 'Cannot parse file `%s`\n%s',
- path$g.relative(self.cwd, fp),
+ // Hard to test.
+ /* c8 ignore next 13 */
+ if (error.code === 'ENOENT') {
+ return next()
+ }
+
+ debug$b(error.message);
+ return found(
+ fault(
+ 'Cannot read file `%s`\n%s',
+ path$c.relative(self.cwd, fp),
error.message
)
- );
- } else if (result) {
- debug$d('Read file `%s`', fp);
- found(null, result);
- } else {
- next();
+ )
}
+
+ 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);
}
- }
- function found(error, result) {
- var cbs = self.cache[directory];
- self.cache[directory] = error || result;
- applyAll(cbs, error || result);
+ /**
+ * @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);
+ }
}
- }
- function applyAll(cbs, result) {
- var index = cbs.length;
+ /**
+ * @param {Callback[]} cbs
+ * @param {Value|Error|undefined} result
+ */
+ function applyAll(cbs, result) {
+ let index = cbs.length;
- while (index--) {
- apply(cbs[index], result);
+ while (index--) {
+ apply(cbs[index], result);
+ }
}
- }
- 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);
+ /**
+ * @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);
+ }
}
}
}
-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;
+/**
+ * @typedef {import('unified').Plugin<unknown[]>} Plugin
+ * @typedef {import('unified').PluginTuple<unknown[]>} PluginTuple
+ * @typedef {import('unified').PluggableList} PluggableList
+ *
+ * @typedef {Record<string, unknown>} Settings
+ *
+ * @typedef {Record<string, Settings|null|undefined>} PluginIdObject
+ * @typedef {Array<string|[string, ...unknown[]]>} PluginIdList
+ *
+ * @typedef Preset
+ * @property {Settings} [settings]
+ * @property {PluggableList|PluginIdObject|PluginIdList|undefined} [plugins]
+ *
+ * @typedef Config
+ * @property {Settings} [settings]
+ * @property {Array<PluginTuple>} [plugins]
+ *
+ * @callback ConfigTransform
+ * @param {any} config
+ * @param {string} filePath
+ * @returns {Preset}
+ *
+ * @callback Loader
+ * @param {Buffer} buf
+ * @param {string} filePath
+ * @returns {Promise<Preset|undefined>}
+ *
+ * @callback Callback
+ * @param {Error|null} error
+ * @param {Config} [result]
+ * @returns {void}
+ */
-var configuration = Config;
+const debug$a = createDebug('unified-engine:configuration');
-var own$f = {}.hasOwnProperty;
+const own$c = {}.hasOwnProperty;
-var loaders = {
+/** @type {Record<string, Loader>} */
+const loaders = {
'.json': loadJson,
'.cjs': loadScriptOrModule,
'.mjs': loadScriptOrModule,
@@ -9271,142 +21840,211 @@ var loaders = {
'.yml': loadYaml
};
-var defaultLoader = loadJson;
+const defaultLoader = loadJson;
-Config.prototype.load = load$3;
+/**
+ * @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 = [];
-function Config(options) {
- var names = [];
+ /** @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);
+ }
- this.cwd = options.cwd;
- this.packageField = options.packageField;
- this.pluginPrefix = options.pluginPrefix;
- this.configTransform = options.configTransform;
- this.defaultConfig = options.defaultConfig;
+ if (options.packageField) {
+ names.push('package.json');
+ debug$a(
+ 'Looking for `%s` fields in `package.json` files',
+ options.packageField
+ );
+ }
- if (options.rcName) {
- names.push(
- options.rcName,
- options.rcName + '.js',
- options.rcName + '.yml',
- options.rcName + '.yaml'
- );
- debug$c('Looking for `%s` configuration files', names);
- }
+ /** @type {Preset} */
+ this.given = {settings: options.settings, plugins: options.plugins};
+ this.create = this.create.bind(this);
- if (options.packageField) {
- names.push('package.json');
- debug$c(
- 'Looking for `%s` fields in `package.json` files',
- options.packageField
- );
+ /** @type {FindUp<Config>} */
+ this.findUp = new FindUp({
+ cwd: options.cwd,
+ filePath: options.rcPath,
+ detect: options.detectConfig,
+ names,
+ create: this.create
+ });
}
- this.given = {settings: options.settings, plugins: options.plugins};
- this.create = create$1.bind(this);
-
- this.findUp = new FindUp$1({
- filePath: options.rcPath,
- cwd: options.cwd,
- detect: options.detectConfig,
- names: names,
- create: this.create
- });
-}
-
-function load$3(filePath, callback) {
- var self = this;
-
- self.findUp.load(filePath || path$f.resolve(this.cwd, 'stdin.js'), done);
-
- function done(error, file) {
- if (error || file) {
- return callback(error, file)
- }
+ /**
+ * @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)
+ }
- self.create().then(function (result) {
- callback(null, result);
- }, callback);
+ this.create(undefined, undefined).then((result) => {
+ callback(null, result);
+ }, callback);
+ }
+ );
}
-}
-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;
+ /**
+ * @param {Buffer|undefined} buf
+ * @param {string|undefined} filePath
+ * @returns {Promise<Config|undefined>}
+ */
+ 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;
- if (filePath) {
- contents = await fn.apply(self, arguments);
- }
+ if (filePath && buf) {
+ value = await loader.call(this, buf, filePath);
- if (self.configTransform && contents !== undefined) {
- contents = self.configTransform(contents, filePath);
- }
+ if (this.configTransform && value !== undefined) {
+ value = this.configTransform(value, filePath);
+ }
+ }
- // 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
- }
+ // 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
+ }
- if (contents === undefined) {
- if (self.defaultConfig) {
- await merge$1(
+ if (value === undefined) {
+ if (this.defaultConfig) {
+ await merge(
+ result,
+ this.defaultConfig,
+ Object.assign({}, options, {root: this.cwd})
+ );
+ }
+ } else {
+ await merge(
result,
- self.defaultConfig,
- Object.assign({}, options, {root: self.cwd})
+ value,
+ // @ts-expect-error: `value` can only exist if w/ `filePath`.
+ Object.assign({}, options, {root: path$c.dirname(filePath)})
);
}
- } else {
- await merge$1(
+
+ await merge(
result,
- contents,
- Object.assign({}, options, {root: path$f.dirname(filePath)})
+ this.given,
+ Object.assign({}, options, {root: this.cwd})
);
- }
-
- await merge$1(result, self.given, Object.assign({}, options, {root: self.cwd}));
- return result
+ // C8 bug on Node@12
+ /* c8 ignore next 2 */
+ return result
+ }
}
-function loadScriptOrModule(_, filePath) {
+/** @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)
}
-function loadYaml(buf, filePath) {
- return yaml.safeLoad(buf, {filename: path$f.basename(filePath)})
+/** @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)})
}
-function loadJson(buf, filePath) {
- var result = json$2(buf, filePath);
-
- if (path$f.basename(filePath) === 'package.json') {
- result = result[this.packageField];
- }
+/** @type {Loader} */
+async function loadJson(buf, filePath) {
+ /** @type {Record<string, unknown>} */
+ const result = parseJson_1(String(buf), filePath);
- return result
+ // 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
}
-async function merge$1(target, raw, options) {
+/**
+ * @param {Required<Config>} target
+ * @param {Preset} raw
+ * @param {{root: string, prefix: string|undefined}} options
+ * @returns {Promise<Config>}
+ */
+async function merge(target, raw, options) {
if (typeof raw === 'object' && raw !== null) {
await addPreset(raw);
} else {
throw new Error('Expected preset, not `' + raw + '`')
}
+ // C8 bug on Node@12
+ /* c8 ignore next 6 */
return target
+ /**
+ * @param {Preset} result
+ */
async function addPreset(result) {
- var plugins = result.plugins;
+ const plugins = result.plugins;
if (plugins === null || plugins === undefined) ; else if (typeof plugins === 'object' && plugins !== null) {
- await ('length' in plugins ? addEach(plugins) : addIn(plugins));
+ await (Array.isArray(plugins) ? addEach(plugins) : addIn(plugins));
} else {
throw new Error(
'Expected a list or object of plugins, not `' + plugins + '`'
@@ -9414,152 +22052,190 @@ async function merge$1(target, raw, options) {
}
target.settings = Object.assign({}, target.settings, result.settings);
+ // C8 bug on Node@12
+ /* c8 ignore next 6 */
}
+ /**
+ * @param {PluginIdList|PluggableList} result
+ */
async function addEach(result) {
- var index = -1;
- var value;
+ let index = -1;
while (++index < result.length) {
- value = result[index];
+ const value = result[index];
// 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));
+ /* 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 */
}
+ /**
+ * @param {PluginIdObject} result
+ */
async function addIn(result) {
- var key;
+ /** @type {string} */
+ let key;
for (key in result) {
- // Keep order sequential instead of parallel.
- // eslint-disable-next-line no-await-in-loop
- await use(key, result[key]);
+ 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]);
+ }
}
+ // C8 bug on Node@12
+ /* c8 ignore next 7 */
}
+ /**
+ * @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$1(target, usable, options);
+ await merge(target, usable, options);
}
+ // C8 bug on Node@12
+ /* c8 ignore next 7 */
}
+ /**
+ * @param {string} id
+ * @param {Settings|null|undefined} value
+ */
async function addModule(id, value) {
- var fp = loadPlugin.resolve(id, {cwd: options.root, prefix: options.prefix});
- var result;
+ /** @type {string} */
+ let fp;
- if (fp) {
- result = await loadFromAbsolutePath(fp, options.root);
+ 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
+ }
- 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`',
+ const result = await loadFromAbsolutePath(fp, options.root);
+
+ try {
+ if (typeof result === 'function') {
+ addPlugin(result, value);
+ } else {
+ await merge(
+ target,
result,
- path$f.relative(options.root, fp)
- )
+ Object.assign({}, options, {root: path$c.dirname(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
- );
+ } 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 */
}
- function addPlugin(result, value) {
- var entry = find$2(target.plugins, result);
+ /**
+ * @param {Plugin} plugin
+ * @param {Settings|null|undefined} value
+ * @returns {void}
+ */
+ function addPlugin(plugin, value) {
+ const entry = find(target.plugins, plugin);
+
+ if (value === null) {
+ value = undefined;
+ }
if (entry) {
reconfigure(entry, value);
} else {
- target.plugins.push([result, value]);
+ target.plugins.push([plugin, value]);
}
}
}
+/**
+ * @param {PluginTuple} entry
+ * @param {Settings|undefined} value
+ * @returns {void}
+ */
function reconfigure(entry, value) {
- if (plain$1(entry[1]) && plain$1(value)) {
+ if (isPlainObject$1(entry[1]) && isPlainObject$1(value)) {
value = Object.assign({}, entry[1], value);
}
entry[1] = value;
}
-function find$2(entries, plugin) {
- var index = -1;
+/**
+ * @param {Array<PluginTuple>} entries
+ * @param {Plugin} plugin
+ * @returns {PluginTuple|undefined}
+ */
+function find(entries, plugin) {
+ let index = -1;
while (++index < entries.length) {
- if (entries[index][0] === plugin) {
- return entries[index]
+ const entry = entries[index];
+ if (entry[0] === plugin) {
+ return entry
}
}
}
-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
- }
-}
-
+/**
+ * @param {string} fp
+ * @param {string} base
+ * @returns {Promise<Plugin|Preset>}
+ */
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
- )
- }
- }
+ try {
+ /** @type {{default?: unknown}} */
+ const result = await import(pathToFileURL$1(fp).href);
- if (result && typeof result === 'object' && result.__esModule) {
- result = result.default;
+ if (!('default' in result)) {
+ throw new Error(
+ 'Expected a plugin or preset exported as the default export'
+ )
}
- }
- /* 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;
+ // @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)
}
-
- return result
}
-var Configuration = configuration;
-
-var configure_1$2 = configure$6;
+/**
+ * @typedef {import('./index.js').Settings} Settings
+ */
-function configure$6(context, settings) {
+/**
+ * @param {Context} context
+ * @param {Settings} settings
+ */
+function configure$3(context, settings) {
context.configuration = new Configuration(settings);
}
@@ -9584,7 +22260,7 @@ const REGEX_SPLITALL_CRLF = /\r?\n/g;
// ..
const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/;
-const SLASH$1 = '/';
+const SLASH = '/';
const KEY_IGNORE = typeof Symbol !== 'undefined'
? Symbol.for('node-ignore')
/* istanbul ignore next */
@@ -9927,7 +22603,7 @@ const createRule = (pattern, ignorecase) => {
)
};
-const throwError$1 = (message, Ctor) => {
+const throwError = (message, Ctor) => {
throw new Ctor(message)
};
@@ -9961,7 +22637,7 @@ const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path);
checkPath.isNotRelative = isNotRelative;
checkPath.convert = p => p;
-class Ignore$2 {
+class Ignore$1 {
constructor ({
ignorecase = true
} = {}) {
@@ -10064,7 +22740,7 @@ class Ignore$2 {
// Supports nullable path
&& checkPath.convert(originalPath);
- checkPath(path, originalPath, throwError$1);
+ checkPath(path, originalPath, throwError);
return this._t(path, cache, checkUnignored, slices)
}
@@ -10077,7 +22753,7 @@ class Ignore$2 {
if (!slices) {
// path/to/a.js
// ['path', 'to', 'a.js']
- slices = path.split(SLASH$1);
+ slices = path.split(SLASH);
}
slices.pop();
@@ -10088,7 +22764,7 @@ class Ignore$2 {
}
const parent = this._t(
- slices.join(SLASH$1) + SLASH$1,
+ slices.join(SLASH) + SLASH,
cache,
checkUnignored,
slices
@@ -10120,19 +22796,19 @@ class Ignore$2 {
}
}
-const factory$5 = options => new Ignore$2(options);
+const factory$1 = options => new Ignore$1(options);
const returnFalse = () => false;
const isPathValid = path =>
checkPath(path && checkPath.convert(path), path, returnFalse);
-factory$5.isPathValid = isPathValid;
+factory$1.isPathValid = isPathValid;
// Fixes typescript
-factory$5.default = factory$5;
+factory$1.default = factory$1;
-var ignore$2 = factory$5;
+var ignore = factory$1;
// Windows
// --------------------------------------------------------------
@@ -10161,66 +22837,87 @@ if (
|| isNotRelative(path);
}
-var path$e = require$$0__default$2['default'];
-var gitignore$1 = ignore$2;
-var FindUp = findUp;
-
-var ignore$1 = Ignore$1;
-
-Ignore$1.prototype.check = check$5;
-
-function Ignore$1(options) {
- this.cwd = options.cwd;
- this.ignorePathResolveFrom = options.ignorePathResolveFrom;
-
- this.findUp = new FindUp({
- filePath: options.ignorePath,
- cwd: options.cwd,
- detect: options.detectIgnore,
- names: options.ignoreName ? [options.ignoreName] : [],
- create: create
- });
-}
-
-function check$5(filePath, callback) {
- var self = this;
-
- self.findUp.load(filePath, done);
+/**
+ * @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]
+ */
- function done(error, ignore) {
- var normal;
+class Ignore {
+ /**
+ * @param {Options} options
+ */
+ constructor(options) {
+ /** @type {string} */
+ this.cwd = options.cwd;
+ /** @type {ResolveFrom|undefined} */
+ this.ignorePathResolveFrom = options.ignorePathResolveFrom;
+
+ /** @type {FindUp<IgnoreConfig>} */
+ this.findUp = new FindUp({
+ cwd: options.cwd,
+ filePath: options.ignorePath,
+ detect: options.detectIgnore,
+ names: options.ignoreName ? [options.ignoreName] : [],
+ create
+ });
+ }
- 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)
- );
+ /**
+ * @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)
+ );
- if (
- normal === '' ||
- normal === '..' ||
- normal.charAt(0) === path$e.sep ||
- normal.slice(0, 3) === '..' + path$e.sep
- ) {
- callback(null, false);
+ 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, ignore.ignores(normal));
+ callback(null, false);
}
- } else {
- callback(null, false);
- }
+ });
}
}
+/**
+ * @param {Buffer} buf
+ * @param {string} filePath
+ * @returns {IgnoreConfig}
+ */
function create(buf, filePath) {
- var ignore = gitignore$1().add(String(buf));
- ignore.filePath = path$e.dirname(filePath);
- return ignore
+ /** @type {IgnoreConfig} */
+ return Object.assign(ignore().add(String(buf)), {
+ filePath: path$c.dirname(filePath)
+ })
}
var old$1 = {};
@@ -10246,9 +22943,9 @@ var old$1 = {};
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
-var pathModule = require$$0__default$2['default'];
-var isWindows$2 = process.platform === 'win32';
-var fs$e = require$$0__default$3['default'];
+var pathModule = path$b;
+var isWindows = process.platform === 'win32';
+var fs$3 = require$$0$3;
// JavaScript implementation of realpath, ported from node pre-v6
@@ -10297,14 +22994,14 @@ 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) {
+if (isWindows) {
var nextPartRe = /(.*?)(?:[\/\\]+|$)/g;
} else {
var nextPartRe = /(.*?)(?:[\/]+|$)/g;
}
// Regex to find the device root, including trailing slash. E.g. 'c:\\'.
-if (isWindows$2) {
+if (isWindows) {
var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/;
} else {
var splitRootRe = /^[\/]*/;
@@ -10342,8 +23039,8 @@ old$1.realpathSync = function realpathSync(p, cache) {
previous = '';
// On windows, check that the root exists. On unix there is no need.
- if (isWindows$2 && !knownHard[base]) {
- fs$e.lstatSync(base);
+ if (isWindows && !knownHard[base]) {
+ fs$3.lstatSync(base);
knownHard[base] = true;
}
}
@@ -10370,7 +23067,7 @@ old$1.realpathSync = function realpathSync(p, cache) {
// some known symbolic link. no need to stat again.
resolvedLink = cache[base];
} else {
- var stat = fs$e.lstatSync(base);
+ var stat = fs$3.lstatSync(base);
if (!stat.isSymbolicLink()) {
knownHard[base] = true;
if (cache) cache[base] = base;
@@ -10380,20 +23077,20 @@ old$1.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$2) {
+ if (!isWindows) {
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);
+ 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$2) seenLinks[id] = linkTarget;
+ if (!isWindows) seenLinks[id] = linkTarget;
}
// resolve the link, then start over
@@ -10444,8 +23141,8 @@ old$1.realpath = function realpath(p, cache, cb) {
previous = '';
// 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 (isWindows && !knownHard[base]) {
+ fs$3.lstat(base, function(err) {
if (err) return cb(err);
knownHard[base] = true;
LOOP();
@@ -10482,7 +23179,7 @@ old$1.realpath = function realpath(p, cache, cb) {
return gotResolvedLink(cache[base]);
}
- return fs$e.lstat(base, gotStat);
+ return fs$3.lstat(base, gotStat);
}
function gotStat(err, stat) {
@@ -10498,17 +23195,17 @@ old$1.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$2) {
+ if (!isWindows) {
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) {
+ fs$3.stat(base, function(err) {
if (err) return cb(err);
- fs$e.readlink(base, function(err, target) {
- if (!isWindows$2) seenLinks[id] = target;
+ fs$3.readlink(base, function(err, target) {
+ if (!isWindows) seenLinks[id] = target;
gotTarget(err, target);
});
});
@@ -10529,19 +23226,19 @@ old$1.realpath = function realpath(p, cache, cb) {
}
};
-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 fs_realpath = realpath;
+realpath.realpath = realpath;
+realpath.sync = realpathSync;
+realpath.realpathSync = realpathSync;
+realpath.monkeypatch = monkeypatch;
+realpath.unmonkeypatch = unmonkeypatch;
-var fs$d = require$$0__default$3['default'];
-var origRealpath = fs$d.realpath;
-var origRealpathSync = fs$d.realpathSync;
+var fs$2 = require$$0$3;
+var origRealpath = fs$2.realpath;
+var origRealpathSync = fs$2.realpathSync;
var version$2 = process.version;
-var ok$2 = /^v[0-5]\./.test(version$2);
+var ok$1 = /^v[0-5]\./.test(version$2);
var old = old$1;
function newError (er) {
@@ -10552,8 +23249,8 @@ function newError (er) {
)
}
-function realpath$2 (p, cache, cb) {
- if (ok$2) {
+function realpath (p, cache, cb) {
+ if (ok$1) {
return origRealpath(p, cache, cb)
}
@@ -10571,7 +23268,7 @@ function realpath$2 (p, cache, cb) {
}
function realpathSync (p, cache) {
- if (ok$2) {
+ if (ok$1) {
return origRealpathSync(p, cache)
}
@@ -10587,13 +23284,13 @@ function realpathSync (p, cache) {
}
function monkeypatch () {
- fs$d.realpath = realpath$2;
- fs$d.realpathSync = realpathSync;
+ fs$2.realpath = realpath;
+ fs$2.realpathSync = realpathSync;
}
function unmonkeypatch () {
- fs$d.realpath = origRealpath;
- fs$d.realpathSync = origRealpathSync;
+ fs$2.realpath = origRealpath;
+ fs$2.realpathSync = origRealpathSync;
}
var concatMap$1 = function (xs, fn) {
@@ -10615,7 +23312,7 @@ 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$3(a, b, str);
+ var r = range(a, b, str);
return r && {
start: r[0],
@@ -10631,17 +23328,14 @@ function maybeMatch(reg, str) {
return m ? m[0] : null;
}
-balanced$1.range = range$3;
-function range$3(a, b, str) {
+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;
if (ai >= 0 && bi > 0) {
- if(a===b) {
- return [ai, bi];
- }
begs = [];
left = str.length;
@@ -10683,7 +23377,7 @@ var escClose = '\0CLOSE'+Math.random()+'\0';
var escComma = '\0COMMA'+Math.random()+'\0';
var escPeriod = '\0PERIOD'+Math.random()+'\0';
-function numeric$1(str) {
+function numeric(str) {
return parseInt(str, 10) == str
? parseInt(str, 10)
: str.charCodeAt(0);
@@ -10750,7 +23444,7 @@ function expandTop(str) {
str = '\\{\\}' + str.substr(2);
}
- return expand$4(escapeBraces(str), true).map(unescapeBraces);
+ return expand$2(escapeBraces(str), true).map(unescapeBraces);
}
function embrace(str) {
@@ -10767,7 +23461,7 @@ function gte(i, y) {
return i >= y;
}
-function expand$4(str, isTop) {
+function expand$2(str, isTop) {
var expansions = [];
var m = balanced('{', '}', str);
@@ -10781,7 +23475,7 @@ function expand$4(str, isTop) {
// {a},b}
if (m.post.match(/,.*\}/)) {
str = m.pre + '{' + m.body + escClose + m.post;
- return expand$4(str);
+ return expand$2(str);
}
return [str];
}
@@ -10793,10 +23487,10 @@ function expand$4(str, isTop) {
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);
+ n = expand$2(n[0], false).map(embrace);
if (n.length === 1) {
var post = m.post.length
- ? expand$4(m.post, false)
+ ? expand$2(m.post, false)
: [''];
return post.map(function(p) {
return m.pre + n[0] + p;
@@ -10811,17 +23505,17 @@ function expand$4(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$4(m.post, false)
+ ? expand$2(m.post, false)
: [''];
var N;
if (isSequence) {
- var x = numeric$1(n[0]);
- var y = numeric$1(n[1]);
+ 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$1(n[2]))
+ ? Math.abs(numeric(n[2]))
: 1;
var test = lte;
var reverse = y < x;
@@ -10855,7 +23549,7 @@ function expand$4(str, isTop) {
N.push(c);
}
} else {
- N = concatMap(n, function(el) { return expand$4(el, false) });
+ N = concatMap(n, function(el) { return expand$2(el, false) });
}
for (var j = 0; j < N.length; j++) {
@@ -10872,13 +23566,13 @@ function expand$4(str, isTop) {
var minimatch_1 = minimatch$3;
minimatch$3.Minimatch = Minimatch$1;
-var path$d = { sep: '/' };
+var path$4 = { sep: '/' };
try {
- path$d = require$$0__default$2['default'];
+ path$4 = path$b;
} catch (er) {}
-var GLOBSTAR$1 = minimatch$3.GLOBSTAR = Minimatch$1.GLOBSTAR = {};
-var expand$3 = braceExpansion;
+var GLOBSTAR = minimatch$3.GLOBSTAR = Minimatch$1.GLOBSTAR = {};
+var expand$1 = braceExpansion;
var plTypes = {
'!': { open: '(?:(?!(?:', close: '))[^/]*?)'},
@@ -10893,7 +23587,7 @@ var plTypes = {
var qmark = '[^/]';
// * => any number of characters
-var star$3 = qmark + '*?';
+var star = qmark + '*?';
// ** when dots are allowed. Anything goes, except .. and .
// not (^ or / followed by one or two dots followed by $ or /),
@@ -10991,8 +23685,8 @@ function Minimatch$1 (pattern, options) {
pattern = pattern.trim();
// windows support: need to use /, not \
- if (path$d.sep !== '/') {
- pattern = pattern.split(path$d.sep).join('/');
+ if (path$4.sep !== '/') {
+ pattern = pattern.split(path$4.sep).join('/');
}
this.options = options;
@@ -11123,7 +23817,7 @@ function braceExpand (pattern, options) {
return [pattern]
}
- return expand$3(pattern)
+ return expand$1(pattern)
}
// parse a component of the expanded set.
@@ -11137,9 +23831,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$1.prototype.parse = parse$b;
+Minimatch$1.prototype.parse = parse$3;
var SUBPARSE = {};
-function parse$b (pattern, isSub) {
+function parse$3 (pattern, isSub) {
if (pattern.length > 1024 * 64) {
throw new TypeError('pattern is too long')
}
@@ -11147,7 +23841,7 @@ function parse$b (pattern, isSub) {
var options = this.options;
// shortcuts
- if (!options.noglobstar && pattern === '**') return GLOBSTAR$1
+ if (!options.noglobstar && pattern === '**') return GLOBSTAR
if (pattern === '') return ''
var re = '';
@@ -11174,7 +23868,7 @@ function parse$b (pattern, isSub) {
// that wasn't consumed by this pass.
switch (stateChar) {
case '*':
- re += star$3;
+ re += star;
hasMagic = true;
break
case '?':
@@ -11408,7 +24102,7 @@ function parse$b (pattern, isSub) {
});
this.debug('tail=%j\n %s', tail, tail, pl, re);
- var t = pl.type === '*' ? star$3
+ var t = pl.type === '*' ? star
: pl.type === '?' ? qmark
: '\\' + pl.type;
@@ -11527,14 +24221,14 @@ function makeRe () {
}
var options = this.options;
- var twoStar = options.noglobstar ? star$3
+ var twoStar = options.noglobstar ? star
: options.dot ? twoStarDot
: twoStarNoDot;
var flags = options.nocase ? 'i' : '';
var re = set.map(function (pattern) {
return pattern.map(function (p) {
- return (p === GLOBSTAR$1) ? twoStar
+ return (p === GLOBSTAR) ? twoStar
: (typeof p === 'string') ? regExpEscape(p)
: p._src
}).join('\\\/')
@@ -11580,8 +24274,8 @@ function match (f, partial) {
var options = this.options;
// windows: need to use /, not \
- if (path$d.sep !== '/') {
- f = f.split(path$d.sep).join('/');
+ if (path$4.sep !== '/') {
+ f = f.split(path$4.sep).join('/');
}
// treat the test path as a set of pathparts.
@@ -11652,7 +24346,7 @@ Minimatch$1.prototype.matchOne = function (file, pattern, partial) {
// some invalid regexp stuff in the set.
if (p === false) return false
- if (p === GLOBSTAR$1) {
+ if (p === GLOBSTAR) {
this.debug('GLOBSTAR', [pattern, p, f]);
// "**"
@@ -11793,7 +24487,7 @@ function regExpEscape (s) {
return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
}
-var inherits$3 = {exports: {}};
+var inherits$2 = {exports: {}};
var inherits_browser = {exports: {}};
@@ -11826,13 +24520,13 @@ if (typeof Object.create === 'function') {
}
try {
- var util$3 = require$$0__default['default'];
+ var util$1 = require$$0$4;
/* istanbul ignore next */
- if (typeof util$3.inherits !== 'function') throw '';
- inherits$3.exports = util$3.inherits;
+ if (typeof util$1.inherits !== 'function') throw '';
+ inherits$2.exports = util$1.inherits;
} catch (e) {
/* istanbul ignore next */
- inherits$3.exports = inherits_browser.exports;
+ inherits$2.exports = inherits_browser.exports;
}
var pathIsAbsolute = {exports: {}};
@@ -11856,27 +24550,33 @@ pathIsAbsolute.exports = process.platform === 'win32' ? win32 : posix;
pathIsAbsolute.exports.posix = posix;
pathIsAbsolute.exports.win32 = win32;
-var common$3 = {};
+var common$2 = {};
-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;
+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;
function ownProp$2 (obj, field) {
return Object.prototype.hasOwnProperty.call(obj, field)
}
-var path$c = require$$0__default$2['default'];
+var path$3 = path$b;
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())
+}
+
function alphasort (a, b) {
- return a.localeCompare(b, 'en')
+ return a.localeCompare(b)
}
function setupIgnores (self, options) {
@@ -11948,12 +24648,12 @@ function setopts$2 (self, pattern, options) {
if (!ownProp$2(options, "cwd"))
self.cwd = cwd;
else {
- self.cwd = path$c.resolve(options.cwd);
+ self.cwd = path$3.resolve(options.cwd);
self.changedCwd = self.cwd !== cwd;
}
- self.root = options.root || path$c.resolve(self.cwd, "/");
- self.root = path$c.resolve(self.root);
+ 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, "/");
@@ -12004,7 +24704,7 @@ function finish (self) {
all = Object.keys(all);
if (!self.nosort)
- all = all.sort(alphasort);
+ all = all.sort(self.nocase ? alphasorti : alphasort);
// at *some* point we statted all of these
if (self.mark) {
@@ -12057,13 +24757,13 @@ function mark (self, p) {
function makeAbs (self, f) {
var abs = f;
if (f.charAt(0) === '/') {
- abs = path$c.join(self.root, f);
+ abs = path$3.join(self.root, f);
} else if (isAbsolute$2(f) || f === '') {
abs = f;
} else if (self.changedCwd) {
- abs = path$c.resolve(self.cwd, f);
+ abs = path$3.resolve(self.cwd, f);
} else {
- abs = path$c.resolve(f);
+ abs = path$3.resolve(f);
}
if (process.platform === 'win32')
@@ -12093,20 +24793,22 @@ function childrenIgnored$2 (self, path) {
})
}
-var sync$3 = globSync$1;
+var sync$1 = globSync$1;
globSync$1.GlobSync = GlobSync$1;
-var fs$c = require$$0__default$3['default'];
+var fs$1 = require$$0$3;
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 path$2 = path$b;
+var assert$1 = assert$2;
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;
+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;
function globSync$1 (pattern, options) {
if (typeof options === 'function' || arguments.length === 3)
@@ -12160,7 +24862,7 @@ GlobSync$1.prototype._finish = function () {
}
});
}
- common$2.finish(this);
+ common$1.finish(this);
};
@@ -12276,7 +24978,7 @@ GlobSync$1.prototype._processReaddir = function (prefix, read, abs, remain, inde
}
if (e.charAt(0) === '/' && !this.nomount) {
- e = path$b.join(this.root, e);
+ e = path$2.join(this.root, e);
}
this._emitMatch(index, e);
}
@@ -12337,7 +25039,7 @@ GlobSync$1.prototype._readdirInGlobStar = function (abs) {
var entries;
var lstat;
try {
- lstat = fs$c.lstatSync(abs);
+ lstat = fs$1.lstatSync(abs);
} catch (er) {
if (er.code === 'ENOENT') {
// lstat failed, doesn't exist
@@ -12373,7 +25075,7 @@ GlobSync$1.prototype._readdir = function (abs, inGlobStar) {
}
try {
- return this._readdirEntries(abs, fs$c.readdirSync(abs))
+ return this._readdirEntries(abs, fs$1.readdirSync(abs))
} catch (er) {
this._readdirError(abs, er);
return null
@@ -12487,9 +25189,9 @@ GlobSync$1.prototype._processSimple = function (prefix, index) {
if (prefix && isAbsolute$1(prefix) && !this.nomount) {
var trail = /[\/\\]$/.test(prefix);
if (prefix.charAt(0) === '/') {
- prefix = path$b.join(this.root, prefix);
+ prefix = path$2.join(this.root, prefix);
} else {
- prefix = path$b.resolve(this.root, prefix);
+ prefix = path$2.resolve(this.root, prefix);
if (trail)
prefix += '/';
}
@@ -12530,7 +25232,7 @@ GlobSync$1.prototype._stat = function (f) {
if (!stat) {
var lstat;
try {
- lstat = fs$c.lstatSync(abs);
+ lstat = fs$1.lstatSync(abs);
} catch (er) {
if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {
this.statCache[abs] = false;
@@ -12540,7 +25242,7 @@ GlobSync$1.prototype._stat = function (f) {
if (lstat && lstat.isSymbolicLink()) {
try {
- stat = fs$c.statSync(abs);
+ stat = fs$1.statSync(abs);
} catch (er) {
stat = lstat;
}
@@ -12564,11 +25266,11 @@ GlobSync$1.prototype._stat = function (f) {
};
GlobSync$1.prototype._mark = function (p) {
- return common$2.mark(this, p)
+ return common$1.mark(this, p)
};
GlobSync$1.prototype._makeAbs = function (f) {
- return common$2.makeAbs(this, f)
+ return common$1.makeAbs(this, f)
};
// Returns a wrapper function that returns a wrapped callback
@@ -12670,7 +25372,7 @@ function makeres (key) {
return once$1(function RES () {
var cbs = reqs[key];
var len = cbs.length;
- var args = slice$2(arguments);
+ var args = slice$1(arguments);
// XXX It's somewhat ambiguous whether a new callback added in this
// pass should be queued for later execution if something in the
@@ -12697,7 +25399,7 @@ function makeres (key) {
})
}
-function slice$2 (args) {
+function slice$1 (args) {
var length = args.length;
var array = [];
@@ -12745,27 +25447,29 @@ function slice$2 (args) {
// `true` for files, and [children,...] for directories, or `false` for
// things that don't exist.
-var glob_1 = glob$1;
+var glob_1 = glob;
-var fs$b = require$$0__default$3['default'];
+var fs = require$$0$3;
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 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$3;
-var common$1 = common$3;
-var setopts = common$1.setopts;
-var ownProp = common$1.ownProp;
+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$1.childrenIgnored;
-var isIgnored = common$1.isIgnored;
+var childrenIgnored = common.childrenIgnored;
+var isIgnored = common.isIgnored;
var once = once$3.exports;
-function glob$1 (pattern, options, cb) {
+function glob (pattern, options, cb) {
if (typeof options === 'function') cb = options, options = {};
if (!options) options = {};
@@ -12778,13 +25482,13 @@ function glob$1 (pattern, options, cb) {
return new Glob(pattern, options, cb)
}
-glob$1.sync = globSync;
-var GlobSync = glob$1.GlobSync = globSync.GlobSync;
+glob.sync = globSync;
+var GlobSync = glob.GlobSync = globSync.GlobSync;
// old api surface
-glob$1.glob = glob$1;
+glob.glob = glob;
-function extend$3 (origin, add) {
+function extend$1 (origin, add) {
if (add === null || typeof add !== 'object') {
return origin
}
@@ -12797,8 +25501,8 @@ function extend$3 (origin, add) {
return origin
}
-glob$1.hasMagic = function (pattern, options_) {
- var options = extend$3({}, options_);
+glob.hasMagic = function (pattern, options_) {
+ var options = extend$1({}, options_);
options.noprocess = true;
var g = new Glob(pattern, options);
@@ -12818,8 +25522,8 @@ glob$1.hasMagic = function (pattern, options_) {
return false
};
-glob$1.Glob = Glob;
-inherits$2(Glob, EE);
+glob.Glob = Glob;
+inherits$1(Glob, EE);
function Glob (pattern, options, cb) {
if (typeof options === 'function') {
cb = options;
@@ -12896,7 +25600,7 @@ Glob.prototype._finish = function () {
if (this.realpath && !this._didRealpath)
return this._realpath()
- common$1.finish(this);
+ common.finish(this);
this.emit('end', this.found);
};
@@ -12955,11 +25659,11 @@ Glob.prototype._realpathSet = function (index, cb) {
};
Glob.prototype._mark = function (p) {
- return common$1.mark(this, p)
+ return common.mark(this, p)
};
Glob.prototype._makeAbs = function (f) {
- return common$1.makeAbs(this, f)
+ return common.makeAbs(this, f)
};
Glob.prototype.abort = function () {
@@ -13129,7 +25833,7 @@ Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, in
}
if (e.charAt(0) === '/' && !this.nomount) {
- e = path$a.join(this.root, e);
+ e = path$1.join(this.root, e);
}
this._emitMatch(index, e);
}
@@ -13205,7 +25909,7 @@ Glob.prototype._readdirInGlobStar = function (abs, cb) {
var lstatcb = inflight(lstatkey, lstatcb_);
if (lstatcb)
- fs$b.lstat(abs, lstatcb);
+ fs.lstat(abs, lstatcb);
function lstatcb_ (er, lstat) {
if (er && er.code === 'ENOENT')
@@ -13244,7 +25948,7 @@ Glob.prototype._readdir = function (abs, inGlobStar, cb) {
if (Array.isArray(c))
return cb(null, c)
}
- fs$b.readdir(abs, readdirCb(this, abs, cb));
+ fs.readdir(abs, readdirCb(this, abs, cb));
};
function readdirCb (self, abs, cb) {
@@ -13390,9 +26094,9 @@ Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
if (prefix && isAbsolute(prefix) && !this.nomount) {
var trail = /[\/\\]$/.test(prefix);
if (prefix.charAt(0) === '/') {
- prefix = path$a.join(this.root, prefix);
+ prefix = path$1.join(this.root, prefix);
} else {
- prefix = path$a.resolve(this.root, prefix);
+ prefix = path$1.resolve(this.root, prefix);
if (trail)
prefix += '/';
}
@@ -13446,13 +26150,13 @@ Glob.prototype._stat = function (f, cb) {
var self = this;
var statcb = inflight('stat\0' + abs, lstatcb_);
if (statcb)
- fs$b.lstat(abs, statcb);
+ fs.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$b.stat(abs, function (er, stat) {
+ return fs.stat(abs, function (er, stat) {
if (er)
self._stat2(f, abs, null, lstat, cb);
else
@@ -13499,597 +26203,915 @@ var isBuffer = function isBuffer (obj) {
typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
};
-var own$e = {}.hasOwnProperty;
+const proc$1 = process;
-var unistUtilStringifyPosition = stringify$e;
+var own$b = {}.hasOwnProperty;
-function stringify$e(value) {
+/**
+ * @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$e.call(value, 'position') || own$e.call(value, 'type')) {
- return position$4(value.position)
+ if (own$b.call(value, 'position') || own$b.call(value, 'type')) {
+ // @ts-ignore looks like a node.
+ return position(value.position)
}
// Position.
- if (own$e.call(value, 'start') || own$e.call(value, 'end')) {
- return position$4(value)
+ if (own$b.call(value, 'start') || own$b.call(value, 'end')) {
+ // @ts-ignore looks like a position.
+ return position(value)
}
// Point.
- if (own$e.call(value, 'line') || own$e.call(value, 'column')) {
- return point$3(value)
+ if (own$b.call(value, 'line') || own$b.call(value, 'column')) {
+ // @ts-ignore looks like a point.
+ return point$1(value)
}
// ?
return ''
}
-function point$3(point) {
- if (!point || typeof point !== 'object') {
- point = {};
- }
-
- return index$2(point.line) + ':' + index$2(point.column)
+/**
+ * @param {Point} point
+ * @returns {string}
+ */
+function point$1(point) {
+ return index$1(point && point.line) + ':' + index$1(point && point.column)
}
-function position$4(pos) {
- if (!pos || typeof pos !== 'object') {
- pos = {};
- }
-
- return point$3(pos.start) + '-' + point$3(pos.end)
+/**
+ * @param {Position} pos
+ * @returns {string}
+ */
+function position(pos) {
+ return point$1(pos && pos.start) + '-' + point$1(pos && pos.end)
}
-function index$2(value) {
+/**
+ * @param {number} value
+ * @returns {number}
+ */
+function index$1(value) {
return value && typeof value === 'number' ? value : 1
}
-var stringify$d = unistUtilStringifyPosition;
+/**
+ * @typedef {import('unist').Node} Node
+ * @typedef {import('unist').Position} Position
+ * @typedef {import('unist').Point} Point
+ */
-var vfileMessage$1 = VMessage$3;
+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;
-// Inherit from `Error#`.
-function VMessagePrototype$1() {}
-VMessagePrototype$1.prototype = Error.prototype;
-VMessage$3.prototype = new VMessagePrototype$1();
+ super();
-// Message properties.
-var proto$2 = VMessage$3.prototype;
+ if (typeof place === 'string') {
+ origin = place;
+ place = 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;
+ if (typeof origin === 'string') {
+ index = origin.indexOf(':');
-// 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;
+ if (index === -1) {
+ parts[1] = origin;
+ } else {
+ parts[0] = origin.slice(0, index);
+ parts[1] = origin.slice(index + 1);
+ }
+ }
- if (typeof position === 'string') {
- origin = position;
- position = null;
- }
+ 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;
+ }
+ }
- parts = parseOrigin$1(origin);
- range = stringify$d(position) || '1:1';
+ // 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 : '';
- location = {
- start: {line: null, column: null},
- end: {line: null, column: null}
- };
+ /**
+ * 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;
- // Node.
- if (position && position.position) {
- position = position.position;
- }
+ // The following fields are “well known”.
+ // Not standard.
+ // Feel free to add other non-standard fields to your messages.
- if (position) {
- // Position.
- if (position.start) {
- location = position;
- position = position.start;
- } else {
- // Point.
- location.start = position;
- }
+ /* 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 */
}
+}
- if (reason.stack) {
- this.stack = reason.stack;
- reason = reason.message;
- }
+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;
- 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];
-}
+/**
+ * @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: <https://github.com/DefinitelyTyped/DefinitelyTyped/blob/a2bc1d8/types/node/globals.d.ts#L174>
+ *
+ * @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.<string>} [history]
+ * @property {string} [path]
+ * @property {string} [basename]
+ * @property {string} [stem]
+ * @property {string} [extname]
+ * @property {string} [dirname]
+ * @property {Object.<string, unknown>} [data]
+ *
+ * @typedef {{[key: string]: unknown} & VFileCoreOptions} VFileOptions
+ * Configuration: a bunch of keys that will be shallow copied over to the new
+ * file.
+ *
+ * @typedef {Object.<string, unknown>} VFileReporterSettings
+ * @typedef {<T = VFileReporterSettings>(files: VFile[], options: T) => string} VFileReporter
+ */
-function parseOrigin$1(origin) {
- var result = [null, null];
- var index;
+// 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'];
- if (typeof origin === 'string') {
- index = origin.indexOf(':');
+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 (index === -1) {
- result[1] = origin;
+ if (!value) {
+ options = {};
+ } else if (typeof value === 'string' || isBuffer(value)) {
+ // @ts-ignore Looks like a buffer.
+ options = {value};
} else {
- result[0] = origin.slice(0, index);
- result[1] = origin.slice(index + 1);
+ // @ts-ignore Looks like file or options.
+ options = value;
}
- }
-
- return result
-}
-var minpath$1 = require$$0__default$2['default'];
+ /**
+ * 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.<string, unknown>}
+ */
+ this.data = {};
-var minproc$1 = process;
+ /**
+ * List of messages associated with the file.
+ * @type {Array.<VFileMessage>}
+ */
+ this.messages = [];
-var p$1 = minpath$1;
-var proc$2 = minproc$1;
-var buffer$5 = isBuffer;
+ /**
+ * List of file paths the file moved between.
+ * @type {Array.<string>}
+ */
+ this.history = [];
-var core$3 = VFile$3;
+ /**
+ * Base of `path`.
+ * Defaults to `process.cwd()` (`/` in browsers).
+ * @type {string}
+ */
+ this.cwd = proc$1.cwd();
-var own$d = {}.hasOwnProperty;
+ /* eslint-disable no-unused-expressions */
+ /**
+ * Raw value.
+ * @type {VFileValue}
+ */
+ this.value;
-// 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'];
+ // The below are non-standard, they are “well-known”.
+ // As in, used in several tools.
-VFile$3.prototype.toString = toString$9;
+ /**
+ * Whether a file was saved to disk.
+ * This is used by vfile reporters.
+ * @type {boolean}
+ */
+ this.stored;
-// Access full path (`~/index.min.js`).
-Object.defineProperty(VFile$3.prototype, 'path', {get: getPath$1, set: setPath$1});
+ /**
+ * 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 */
-// Access parent path (`~`).
-Object.defineProperty(VFile$3.prototype, 'dirname', {
- get: getDirname$1,
- set: setDirname$1
-});
+ // Set path related properties in the correct order.
+ while (++index < order.length) {
+ prop = order[index];
-// Access basename (`index.min.js`).
-Object.defineProperty(VFile$3.prototype, 'basename', {
- get: getBasename$1,
- set: setBasename$1
-});
+ // 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];
+ }
+ }
-// Access extname (`.js`).
-Object.defineProperty(VFile$3.prototype, 'extname', {
- get: getExtname$1,
- set: setExtname$1
-});
+ // Set non-path related properties.
+ for (prop in options) {
+ if (!order.includes(prop)) {
+ this[prop] = options[prop];
+ }
+ }
+ }
-// Access stem (`index.min`).
-Object.defineProperty(VFile$3.prototype, 'stem', {get: getStem$1, set: setStem$1});
+ /**
+ * Access full path (`~/index.min.js`).
+ */
+ get path() {
+ return this.history[this.history.length - 1]
+ }
-// Construct a new file.
-function VFile$3(options) {
- var prop;
- var index;
+ /**
+ * Set full path (`~/index.min.js`).
+ * Cannot be nullified.
+ */
+ set path(path) {
+ assertNonEmpty(path, 'path');
- if (!options) {
- options = {};
- } else if (typeof options === 'string' || buffer$5(options)) {
- options = {contents: options};
- } else if ('message' in options && 'messages' in options) {
- return options
+ if (this.path !== path) {
+ this.history.push(path);
+ }
}
- if (!(this instanceof VFile$3)) {
- return new VFile$3(options)
+ /**
+ * Access parent path (`~`).
+ */
+ get dirname() {
+ return typeof this.path === 'string' ? path$b.dirname(this.path) : undefined
}
- this.data = {};
- this.messages = [];
- this.history = [];
- this.cwd = proc$2.cwd();
+ /**
+ * 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);
+ }
- // Set path related properties in the correct order.
- index = -1;
+ /**
+ * Access basename (including extname) (`index.min.js`).
+ */
+ get basename() {
+ return typeof this.path === 'string' ? path$b.basename(this.path) : undefined
+ }
- while (++index < order$4.length) {
- prop = order$4[index];
+ /**
+ * 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);
+ }
- if (own$d.call(options, prop)) {
- this[prop] = options[prop];
- }
+ /**
+ * Access extname (including dot) (`.js`).
+ */
+ get extname() {
+ return typeof this.path === 'string' ? path$b.extname(this.path) : undefined
}
- // Set non-path related properties.
- for (prop in options) {
- if (order$4.indexOf(prop) < 0) {
- this[prop] = options[prop];
+ /**
+ * 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');
+
+ if (extname) {
+ if (extname.charCodeAt(0) !== 46 /* `.` */) {
+ throw new Error('`extname` must start with `.`')
+ }
+
+ if (extname.includes('.', 1)) {
+ throw new Error('`extname` cannot contain multiple dots')
+ }
}
+
+ this.path = path$b.join(this.dirname, this.stem + (extname || ''));
}
-}
-function getPath$1() {
- return this.history[this.history.length - 1]
-}
+ /**
+ * Access stem (w/o extname) (`index.min`).
+ */
+ get stem() {
+ return typeof this.path === 'string'
+ ? path$b.basename(this.path, this.extname)
+ : undefined
+ }
-function setPath$1(path) {
- assertNonEmpty$1(path, 'path');
+ /**
+ * 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 || ''));
+ }
- if (this.path !== path) {
- this.history.push(path);
+ /**
+ * 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)
}
-}
-function getDirname$1() {
- return typeof this.path === 'string' ? p$1.dirname(this.path) : undefined
-}
+ /**
+ * 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);
-function setDirname$1(dirname) {
- assertPath$1(this.path, 'dirname');
- this.path = p$1.join(dirname || '', this.basename);
-}
+ if (this.path) {
+ message.name = this.path + ':' + message.name;
+ message.file = this.path;
+ }
-function getBasename$1() {
- return typeof this.path === 'string' ? p$1.basename(this.path) : undefined
-}
+ message.fatal = false;
-function setBasename$1(basename) {
- assertNonEmpty$1(basename, 'basename');
- assertPart$1(basename, 'basename');
- this.path = p$1.join(this.dirname || '', basename);
-}
+ this.messages.push(message);
-function getExtname$1() {
- return typeof this.path === 'string' ? p$1.extname(this.path) : undefined
-}
+ return message
+ }
-function setExtname$1(extname) {
- assertPart$1(extname, 'extname');
- assertPath$1(this.path, 'extname');
+ /**
+ * 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);
- if (extname) {
- if (extname.charCodeAt(0) !== 46 /* `.` */) {
- throw new Error('`extname` must start with `.`')
- }
+ message.fatal = null;
- if (extname.indexOf('.', 1) > -1) {
- throw new Error('`extname` cannot contain multiple dots')
- }
+ return message
}
- this.path = p$1.join(this.dirname, this.stem + (extname || ''));
-}
-
-function getStem$1() {
- return typeof this.path === 'string'
- ? p$1.basename(this.path, this.extname)
- : undefined
-}
+ /**
+ * 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);
-function setStem$1(stem) {
- assertNonEmpty$1(stem, 'stem');
- assertPart$1(stem, 'stem');
- this.path = p$1.join(this.dirname || '', stem + (this.extname || ''));
-}
+ message.fatal = true;
-// Get the value of the file.
-function toString$9(encoding) {
- return (this.contents || '').toString(encoding)
+ throw message
+ }
}
-// 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) {
+/**
+ * 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 `' + p$1.sep + '`'
+ '`' + name + '` cannot be a path: did not expect `' + path$b.sep + '`'
)
}
}
-// Assert that `part` is not empty.
-function assertNonEmpty$1(part, name) {
+/**
+ * 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')
}
}
-// Assert `path` exists.
-function assertPath$1(path, name) {
+/**
+ * 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')
}
}
-var VMessage$2 = vfileMessage$1;
-var VFile$2 = core$3;
-
-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$1(reason, position, origin) {
- var message = new VMessage$2(reason, position, origin);
-
- if (this.path) {
- message.name = this.path + ':' + message.name;
- message.file = this.path;
- }
-
- message.fatal = false;
-
- this.messages.push(message);
-
- return message
-}
-
-// Fail: creates a vmessage, associates it with the file, and throws it.
-function fail$2() {
- var message = this.message.apply(this, arguments);
-
- message.fatal = true;
-
- throw message
-}
-
-// 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);
-
- message.fatal = null;
-
- return message
-}
-
-var vfile$9 = lib$6;
-
-var buffer$4 = isBuffer;
-var vfile$8 = vfile$9;
-
-var core$2 = toVFile;
+/**
+ * @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.
+ */
-// 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()`.
+/**
+ * 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' || buffer$4(options)) {
+ if (typeof options === 'string' || isBuffer(options)) {
options = {path: String(options)};
+ } else if (options instanceof URL$1) {
+ options = {path: fileURLToPath(options)};
}
- return vfile$8(options)
+ return looksLikeAVFile$1(options) ? options : new VFile(options)
}
-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.
+/**
+ * Create a virtual file and read it in, synchronously.
+ *
+ * @param {Compatible} description
+ * @param {ReadOptions} [options]
+ * @returns {VFile}
+ */
function readSync(description, options) {
- var file = vfile$7(description);
- file.contents = fs$a.readFileSync(path$9.resolve(file.cwd, file.path), options);
+ var file = toVFile(description);
+ file.value = require$$0$3.readFileSync(path$b.resolve(file.cwd, file.path), options);
return file
}
-// Create a virtual file and write it out, synchronously.
+/**
+ * Create a virtual file and write it in, synchronously.
+ *
+ * @param {Compatible} description
+ * @param {WriteOptions} [options]
+ * @returns {VFile}
+ */
function writeSync(description, options) {
- var file = vfile$7(description);
- fs$a.writeFileSync(
- path$9.resolve(file.cwd, file.path),
- file.contents || '',
- options
- );
+ var file = toVFile(description);
+ require$$0$3.writeFileSync(path$b.resolve(file.cwd, file.path), file.value || '', options);
return file
}
-var async$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 = vfile$6(description);
+const read$2 =
+ /**
+ * @type {{
+ * (description: Compatible, options: ReadOptions, callback: Callback): void
+ * (description: Compatible, callback: Callback): void
+ * (description: Compatible, options?: ReadOptions): Promise<VFile>
+ * }}
+ */
+ (
+ /**
+ * 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 (!callback && typeof options === 'function') {
- callback = options;
- options = null;
- }
+ if (!callback && typeof options === 'function') {
+ callback = options;
+ options = null;
+ }
- if (!callback) {
- return new Promise(executor)
- }
+ if (!callback) {
+ return new Promise(executor)
+ }
- executor(resolve, callback);
+ executor(resolve, callback);
- function resolve(result) {
- callback(null, result);
- }
+ /**
+ * @param {VFile} result
+ */
+ function resolve(result) {
+ callback(null, result);
+ }
- function executor(resolve, reject) {
- var fp;
+ /**
+ * @param {(x: VFile) => void} resolve
+ * @param {(x: Error, y?: VFile) => void} reject
+ */
+ function executor(resolve, reject) {
+ /** @type {string} */
+ var fp;
- try {
- fp = path$8.resolve(file.cwd, file.path);
- } catch (error) {
- return reject(error)
- }
+ try {
+ fp = path$b.resolve(file.cwd, file.path);
+ } catch (error) {
+ return reject(error)
+ }
- fs$9.readFile(fp, options, done);
+ require$$0$3.readFile(fp, options, done);
- function done(error, res) {
- if (error) {
- reject(error);
- } else {
- file.contents = res;
- resolve(file);
+ /**
+ * @param {Error} error
+ * @param {Value} result
+ */
+ function done(error, result) {
+ if (error) {
+ reject(error);
+ } else {
+ file.value = result;
+ resolve(file);
+ }
+ }
}
}
- }
-}
+ );
-// Create a virtual file and write it out, asynchronously.
-function write(description, options, callback) {
- var file = vfile$6(description);
+const write =
+ /**
+ * @type {{
+ * (description: Compatible, options: WriteOptions, callback: Callback): void
+ * (description: Compatible, callback: Callback): void
+ * (description: Compatible, options?: WriteOptions): Promise<VFile>
+ * }}
+ */
+ (
+ /**
+ * 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);
- // Weird, right? Otherwise `fs` doesn’t accept it.
- if (!callback && typeof options === 'function') {
- callback = options;
- options = undefined;
- }
+ // Weird, right? Otherwise `fs` doesn’t accept it.
+ if (!callback && typeof options === 'function') {
+ callback = options;
+ options = undefined;
+ }
- if (!callback) {
- return new Promise(executor)
- }
+ if (!callback) {
+ return new Promise(executor)
+ }
- executor(resolve, callback);
+ executor(resolve, callback);
- function resolve(result) {
- callback(null, result);
- }
+ /**
+ * @param {VFile} result
+ */
+ function resolve(result) {
+ callback(null, result);
+ }
- function executor(resolve, reject) {
- var fp;
+ /**
+ * @param {(x: VFile) => void} resolve
+ * @param {(x: Error, y?: VFile) => void} reject
+ */
+ function executor(resolve, reject) {
+ /** @type {string} */
+ var fp;
- try {
- fp = path$8.resolve(file.cwd, file.path);
- } catch (error) {
- return reject(error)
- }
+ try {
+ fp = path$b.resolve(file.cwd, file.path);
+ } catch (error) {
+ return reject(error)
+ }
- fs$9.writeFile(fp, file.contents || '', options, done);
+ require$$0$3.writeFile(fp, file.value || '', options, done);
- function done(error) {
- if (error) {
- reject(error);
- } else {
- resolve(file);
+ /**
+ * @param {Error} error
+ */
+ function done(error) {
+ if (error) {
+ reject(error);
+ } else {
+ resolve(file);
+ }
+ }
}
}
- }
-}
-
-var vfile$5 = core$2;
-var sync$1 = sync$2;
-var async = async$1;
-
-var fs$8 = vfile$5;
-
-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$8;
+ );
-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;
+/**
+ * @param {Compatible} value
+ * @returns {value is VFile}
+ */
+function looksLikeAVFile$1(value) {
+ return (
+ value &&
+ typeof value === 'object' &&
+ 'message' in value &&
+ 'messages' in value
+ )
+}
-var finder = find$1;
+toVFile.readSync = readSync;
+toVFile.writeSync = writeSync;
+toVFile.read = read$2;
+toVFile.write = write;
-// Search `patterns`, a mix of globs, paths, and files.
-function find$1(input, options, callback) {
- expand$2(input, options, done);
+/**
+ * @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.<string>} extensions
+ * @property {boolean|undefined} silentlyIgnore
+ * @property {Array.<string>} ignorePatterns
+ * @property {Ignore} ignore
+ *
+ * @typedef SearchResults
+ * @property {fs.Stats|undefined} stats
+ * @property {boolean|undefined} ignored
+ *
+ * @typedef Result
+ * @property {Array.<string|VFile>} input
+ * @property {VFile[]} output
+ *
+ * @typedef CleanResult
+ * @property {boolean} oneFileMode
+ * @property {VFile[]} files
+ *
+ * @callback Callback
+ * @param {Error|null} error
+ * @param {CleanResult} [result]
+ */
- function done(error, result) {
- /* istanbul ignore if - glob errors are unusual.
- * other errors are on the vfile results. */
- if (error) {
+/**
+ * Search `patterns`, a mix of globs, paths, and files.
+ *
+ * @param {Array.<string|VFile>} 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});
}
- }
+ });
}
-// 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;
-
- input.forEach(each);
-
- if (!expected) {
- search$1(paths, options, done);
- }
+/**
+ * Expand the given glob patterns, search given and found directories, and map
+ * to vfiles.
+ *
+ * @param {Array.<string|VFile>} input
+ * @param {Options} options
+ * @param {(error: Error|null, result?: Result) => void} next
+ */
+function expand(input, options, next) {
+ /** @type {Array.<string|VFile>} */
+ let paths = [];
+ let actual = 0;
+ let expected = 0;
+ let index = -1;
+ /** @type {boolean|undefined} */
+ let failed;
- function each(file) {
+ while (++index < input.length) {
+ let file = input[index];
if (typeof file === 'string') {
- if (glob.hasMagic(file)) {
+ if (glob_1.hasMagic(file)) {
expected++;
- glob(file, {cwd: options.cwd}, one);
+ glob_1(file, {cwd: options.cwd}, (error, files) => {
+ // Glob errors are unusual.
+ /* c8 ignore next 3 */
+ if (failed) {
+ return
+ }
+
+ // Glob errors are unusual.
+ /* c8 ignore next 4 */
+ if (error) {
+ failed = true;
+ done1(error);
+ } else {
+ actual++;
+ paths = paths.concat(files);
+
+ if (actual === expected) {
+ search$1(paths, options, done1);
+ }
+ }
+ });
} else {
// `relative` to make the paths canonical.
file =
- path$7.relative(options.cwd, path$7.resolve(options.cwd, 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 = path$7.relative(options.cwd, file.path);
- file.history = [file.path];
+ file.path = fp;
+ file.history = [fp];
paths.push(file);
}
}
- function one(error, files) {
- /* istanbul ignore if - Glob errors are unusual. */
- if (failed) {
- return
- }
-
- /* istanbul ignore if - Glob errors are unusual. */
- if (error) {
- failed = true;
- done(error);
- } else {
- actual++;
- paths = paths.concat(files);
-
- if (actual === expected) {
- search$1(paths, options, done);
- }
- }
+ if (!expected) {
+ search$1(paths, options, done1);
}
- function done(error, files) {
- /* istanbul ignore if - `search` currently does not give errors. */
- if (error) {
+ /**
+ * @param {Error|null} error
+ * @param {Array<VFile>} [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});
@@ -14097,31 +27119,41 @@ function expand$2(input, options, next) {
}
}
-// Search `paths`.
+/**
+ * Search `paths`.
+ *
+ * @param {Array.<string|VFile>} input
+ * @param {Options & {nested?: boolean}} options
+ * @param {(error: Error|null, files: Array.<VFile>) => void} next
+ */
function search$1(input, options, next) {
- var extraIgnore = gitignore().add(options.ignorePatterns);
- var files = [];
- var expected = 0;
- var actual = 0;
+ const extraIgnore = ignore().add(options.ignorePatterns);
+ let expected = 0;
+ let actual = 0;
+ let index = -1;
+ /** @type {Array.<VFile>} */
+ let files = [];
- input.forEach(each);
+ while (++index < input.length) {
+ each(input[index]);
+ }
if (!expected) {
next(null, files);
}
- return each
-
+ /**
+ * @param {string|VFile} file
+ */
function each(file) {
- var ext = typeof file === 'string' ? path$7.extname(file) : file.extname;
- var part;
+ const ext = typeof file === 'string' ? path$c.extname(file) : file.extname;
// Normalise globs.
if (typeof file === 'string') {
- file = file.split('/').join(path$7.sep);
+ file = file.split('/').join(path$c.sep);
}
- part = base(file);
+ const part = base$1(file);
if (options.nested && (part.charAt(0) === '.' || part === 'node_modules')) {
return
@@ -14131,75 +27163,82 @@ function search$1(input, options, next) {
statAndIgnore(
file,
- Object.assign({}, options, {extraIgnore: extraIgnore}),
- handle
- );
-
- function handle(error, result) {
- var ignored = result && result.ignored;
- var dir = result && result.stats && result.stats.isDirectory();
-
- if (ignored && (options.nested || options.silentlyIgnore)) {
- return one(null, [])
- }
-
- if (!ignored && dir) {
- return fs$7.readdir(path$7.resolve(options.cwd, filePath(file)), directory)
- }
-
- if (
- !dir &&
- options.nested &&
- options.extensions.length > 0 &&
- options.extensions.indexOf(ext) === -1
- ) {
- return one(null, [])
- }
-
- file = vfile$4(file);
- file.cwd = options.cwd;
-
- if (ignored) {
- try {
- file.fail('Cannot process specified file: it’s ignored');
- } catch (_) {}
- }
-
- if (error && error.code === 'ENOENT') {
- try {
- file.fail(
- error.syscall === 'stat' ? 'No such file or directory' : error
- );
- } catch (_) {}
- }
-
- one(null, [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
+ );
+ }
+ }
+ )
+ }
- function directory(error, basenames) {
- var file;
+ if (
+ !dir &&
+ options.nested &&
+ options.extensions.length > 0 &&
+ !options.extensions.includes(ext)
+ ) {
+ return one(null, [])
+ }
- /* 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 = toVFile(file);
file.cwd = options.cwd;
- try {
- file.fail('Cannot read directory');
- } catch (_) {}
+ if (ignored) {
+ try {
+ file.fail('Cannot process specified file: it’s ignored');
+ // C8 bug on Node@12
+ /* c8 ignore next 1 */
+ } catch {}
+ }
+
+ 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 {}
+ }
one(null, [file]);
- } else {
- search$1(
- basenames.map(concat),
- Object.assign({}, options, {nested: true}),
- one
- );
}
- }
+ );
- // Error is never given. Always given `results`.
+ /**
+ * Error is never given. Always given `results`.
+ *
+ * @param {Error|null} _
+ * @param {Array.<VFile>} results
+ */
function one(_, results) {
/* istanbul ignore else - Always given. */
if (results) {
@@ -14212,39 +27251,41 @@ function search$1(input, options, next) {
next(null, files);
}
}
-
- function concat(value) {
- return path$7.join(filePath(file), value)
- }
}
}
+/**
+ * @param {VFile|string} file
+ * @param {Options & {extraIgnore: GitIgnore}} options
+ * @param {(error: NodeJS.ErrnoException|null, result?: SearchResults) => void} callback
+ */
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;
+ 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;
- if (!file.contents) {
+ if (typeof file === 'string' || !file.value) {
expected++;
- fs$7.stat(fp, handleStat);
- }
-
- options.ignore.check(fp, handleIgnore);
-
- function handleStat(error, value) {
- stats = value;
- one(error);
+ fs$a.stat(fp, (error, value) => {
+ stats = value;
+ onStartOrCheck(error);
+ });
}
- function handleIgnore(error, value) {
+ options.ignore.check(fp, (error, value) => {
ignored = value;
- one(error);
- }
+ onStartOrCheck(error);
+ });
- function one(error) {
+ /**
+ * @param {Error|null} error
+ */
+ function onStartOrCheck(error) {
actual++;
if (error) {
@@ -14252,13 +27293,13 @@ function statAndIgnore(file, options, callback) {
actual = -1;
} else if (actual === expected) {
callback(null, {
- stats: stats,
+ stats,
ignored:
ignored ||
(normal === '' ||
normal === '..' ||
- normal.charAt(0) === path$7.sep ||
- normal.slice(0, 3) === '..' + path$7.sep
+ normal.charAt(0) === path$c.sep ||
+ normal.slice(0, 3) === '..' + path$c.sep
? false
: options.extraIgnore.ignores(normal))
});
@@ -14266,14 +27307,26 @@ function statAndIgnore(file, options, callback) {
}
}
-function base(file) {
- return typeof file === 'string' ? path$7.basename(file) : file.basename
+/**
+ * @param {string|VFile} file
+ * @returns {string}
+ */
+function base$1(file) {
+ return typeof file === 'string' ? path$c.basename(file) : file.basename
}
+/**
+ * @param {string|VFile} file
+ * @returns {string}
+ */
function filePath(file) {
return typeof file === 'string' ? file : file.path
}
+/**
+ * @param {Result} result
+ * @returns {boolean}
+ */
function oneFileMode(result) {
return (
result.output.length === 1 &&
@@ -14282,17 +27335,23 @@ function oneFileMode(result) {
)
}
-var Ignore = ignore$1;
-var find = finder;
-
-var fileSystem_1$1 = fileSystem$3;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Callback} Callback
+ * @typedef {import('./index.js').Settings} Settings
+ * @typedef {import('./index.js').Configuration} Configuration
+ */
-// Find files from the file-system.
-function fileSystem$3(context, settings, next) {
+/**
+ * @param {Context} context
+ * @param {Settings} settings
+ * @param {Callback} next
+ */
+function fileSystem$1(context, settings, next) {
if (context.files.length === 0) {
next();
} else {
- find(
+ finder(
context.files,
{
cwd: settings.cwd,
@@ -14307,37 +27366,46 @@ function fileSystem$3(context, settings, next) {
ignorePathResolveFrom: settings.ignorePathResolveFrom
})
},
- onfound
- );
- }
-
- function onfound(error, result) {
- var output = result.files;
+ (error, result) => {
+ // Glob errors typically don’t occur.
+ /* c8 ignore next 4 */
+ if (!result) {
+ next(error);
+ return
+ }
- // Sort alphabetically.
- // Everything is unique so we do not care about cases where left and right
- // are equal.
- output.sort(sortAlphabetically);
+ const output = result.files;
- // Mark as given.
- // This allows outputting files, which can be pretty dangerous, so it’s
- // “hidden”.
- output.forEach(markAsGiven);
+ // Sort alphabetically.
+ // Everything is unique so we do not care about cases where left and right
+ // are equal.
+ output.sort(sortAlphabetically);
- context.files = output;
+ // 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;
+ }
- // 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;
- }
+ context.files = output;
- next(error);
- }
+ // 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;
+ }
- function markAsGiven(file) {
- file.data.unifiedEngineGiven = true;
+ next(error);
+ }
+ );
}
+ /**
+ * @param {VFile} left
+ * @param {VFile} right
+ * @returns {number}
+ */
function sortAlphabetically(left, right) {
return left.path < right.path ? -1 : 1
}
@@ -14345,7 +27413,7 @@ function fileSystem$3(context, settings, next) {
/* eslint-disable node/no-deprecated-api */
-var toString$8 = Object.prototype.toString;
+var toString$2 = Object.prototype.toString;
var isModern = (
typeof Buffer !== 'undefined' &&
@@ -14355,7 +27423,7 @@ var isModern = (
);
function isArrayBuffer (input) {
- return toString$8.call(input).slice(8, -1) === 'ArrayBuffer'
+ return toString$2.call(input).slice(8, -1) === 'ArrayBuffer'
}
function fromArrayBuffer (obj, byteOffset, length) {
@@ -15050,8 +28118,8 @@ function packF32(v) { return packIEEE754(v, 8, 23); }
}());
}(typedarray));
-var Writable = require$$0__default$5['default'].Writable;
-var inherits$1 = inherits$3.exports;
+var Writable = require$$1.Writable;
+var inherits = inherits$2.exports;
var bufferFrom = bufferFrom_1;
if (typeof Uint8Array === 'undefined') {
@@ -15091,7 +28159,7 @@ function ConcatStream(opts, cb) {
}
var concatStream = ConcatStream;
-inherits$1(ConcatStream, Writable);
+inherits(ConcatStream, Writable);
ConcatStream.prototype._write = function(chunk, enc, next) {
this.body.push(chunk);
@@ -15190,17 +28258,25 @@ function u8Concat (parts) {
return u8
}
-var debug$b = src.exports('unified-engine:file-set-pipeline:stdin');
-var vfile$3 = toVfile;
-var concat = concatStream;
-
-var stdin_1 = stdin$1;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Callback} Callback
+ * @typedef {import('./index.js').Settings} Settings
+ */
-function stdin$1(context, settings, next) {
- var error;
+const debug$9 = createDebug('unified-engine:file-set-pipeline:stdin');
+/**
+ * @param {Context} context
+ * @param {Settings} settings
+ * @param {Callback} next
+ */
+function stdin(context, settings, next) {
if (settings.files && settings.files.length > 0) {
- debug$b('Ignoring `streamIn`');
+ debug$9('Ignoring `streamIn`');
+
+ /** @type {Error|undefined} */
+ let error;
if (settings.filePath) {
error = new Error(
@@ -15213,176 +28289,183 @@ function stdin$1(context, settings, next) {
return
}
+ // @ts-expect-error: does exist on `stdin`.
if (settings.streamIn.isTTY) {
- debug$b('Cannot read from `tty` stream');
+ debug$9('Cannot read from `tty` stream');
next(new Error('No input'));
return
}
- debug$b('Reading from `streamIn`');
-
- settings.streamIn.pipe(concat({encoding: 'string'}, read));
-
- function read(value) {
- var file = vfile$3(settings.filePath || undefined);
-
- debug$b('Read from `streamIn`');
-
- file.cwd = settings.cwd;
- file.contents = value;
- file.data.unifiedEngineGiven = true;
- file.data.unifiedEngineStreamIn = true;
-
- context.files = [file];
-
- // If `out` was not set, set `out`.
- settings.out =
- settings.out === null || settings.out === undefined ? true : settings.out;
-
- next();
- }
-}
-
-var events = require$$0__default$4['default'];
-var inherits = require$$0__default['default'].inherits;
-var trough$3 = trough_1;
-var vfile$2 = toVfile;
+ debug$9('Reading from `streamIn`');
-var fileSet = FileSet$1;
-
-// FileSet constructor.
-function FileSet$1() {
- var self = this;
+ settings.streamIn.pipe(
+ concatStream({encoding: 'string'}, (value) => {
+ const file = toVFile(settings.filePath);
- self.files = [];
- self.origins = [];
+ debug$9('Read from `streamIn`');
- self.expected = 0;
- self.actual = 0;
+ file.cwd = settings.cwd;
+ file.value = value;
+ file.data.unifiedEngineGiven = true;
+ file.data.unifiedEngineStreamIn = true;
- self.pipeline = trough$3();
- self.plugins = [];
+ context.files = [file];
- events.init.call(self);
+ // If `out` was not set, set `out`.
+ settings.out =
+ settings.out === null || settings.out === undefined
+ ? true
+ : settings.out;
- self.on('one', one$1.bind(self));
+ next();
+ })
+ );
}
-// Events.
-inherits(FileSet$1, events.EventEmitter);
-
-// Expose methods.
-FileSet$1.prototype.valueOf = valueOf;
-FileSet$1.prototype.use = use;
-FileSet$1.prototype.add = add;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Pipeline} Pipeline
+ */
-// Create an array representation of `fileSet`.
-function valueOf() {
- return this.files
-}
+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();
-// Attach middleware to the pipeline on `fileSet`.
-function use(plugin) {
- var self = this;
- var pipeline = self.pipeline;
- var duplicate = false;
+ /** @type {Array.<VFile>} */
+ 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();
- if (plugin && plugin.pluginId) {
- duplicate = self.plugins.some(matches);
- }
+ // Called when a single file has completed it’s pipeline, triggering `done`
+ // when all files are complete.
+ this.on('one', () => {
+ this.actual++;
- if (!duplicate && self.plugins.indexOf(plugin) !== -1) {
- duplicate = true;
+ if (this.actual >= this.expected) {
+ this.emit('done');
+ }
+ });
}
- if (!duplicate) {
- self.plugins.push(plugin);
- pipeline.use(plugin);
+ /**
+ * Access the files in a set.
+ */
+ valueOf() {
+ return this.files
}
- return self
+ /**
+ * Attach middleware to the pipeline on `fileSet`.
+ *
+ * @param {Completer} plugin
+ */
+ use(plugin) {
+ const pipeline = this.pipeline;
+ let duplicate = false;
- function matches(fn) {
- return fn.pluginId === plugin.pluginId
- }
-}
+ if (plugin && plugin.pluginId) {
+ duplicate = this.plugins.some((fn) => fn.pluginId === plugin.pluginId);
+ }
-// 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;
+ if (!duplicate && this.plugins.includes(plugin)) {
+ duplicate = true;
+ }
- if (typeof file === 'string') {
- file = vfile$2(file);
- }
+ if (!duplicate) {
+ this.plugins.push(plugin);
+ pipeline.use(plugin);
+ }
- // Prevent files from being added multiple times.
- if (self.origins.indexOf(file.history[0]) !== -1) {
- return self
+ return this
}
- self.origins.push(file.history[0]);
-
- // Add.
- self.valueOf().push(file);
- self.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(add);
+ /**
+ * 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);
+ }
- return self
+ // Prevent files from being added multiple times.
+ if (this.origins.includes(file.history[0])) {
+ return this
+ }
- function add() {
- self.emit('add', file);
- }
-}
+ this.origins.push(file.history[0]);
-// Utility invoked when a single file has completed it's pipeline, triggering
-// `done` when all files are complete.
-function one$1() {
- var self = this;
+ // Add.
+ this.valueOf().push(file);
+ this.expected++;
- self.actual++;
+ // 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);
+ });
- if (self.actual >= self.expected) {
- self.emit('done');
+ return this
}
}
-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;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Callback} Callback
+ * @typedef {import('./index.js').Context} Context
+ */
-var read_1 = read$2;
+const debug$8 = createDebug('unified-engine:file-pipeline:read');
-// Fill a file with its contents when not already filled.
-function read$2(context, file, fileSet, next) {
- var filePath = file.path;
+/**
+ * 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;
- if (file.contents || file.data.unifiedEngineStreamIn) {
- debug$a('Not reading file `%s` with contents', filePath);
+ if (file.value || file.data.unifiedEngineStreamIn) {
+ debug$8('Not reading file `%s` with `value`', filePath);
next();
- } else if (stats$7(file).fatal) {
- debug$a('Not reading failed file `%s`', filePath);
+ } else if (statistics(file).fatal) {
+ debug$8('Not reading failed file `%s`', filePath);
next();
} else {
- filePath = path$6.resolve(context.cwd, filePath);
+ filePath = path$c.resolve(context.settings.cwd, filePath);
- debug$a('Reading `%s` in `%s`', filePath, 'utf8');
- fs$6.readFile(filePath, 'utf8', onread);
- }
-
- function onread(error, contents) {
- debug$a('Read `%s` (error: %s)', filePath, error);
+ debug$8('Reading `%s` in `%s`', filePath, 'utf8');
+ fs$a.readFile(filePath, 'utf8', (error, value) => {
+ debug$8('Read `%s` (error: %s)', filePath, error);
- file.contents = contents || '';
+ file.value = value || '';
- next(error);
+ next(error);
+ });
}
}
@@ -15400,7 +28483,7 @@ var has = Object.prototype.hasOwnProperty;
* @type {Function}
*/
-var toString$7 = Object.prototype.toString;
+var toString$1 = Object.prototype.toString;
/**
* Test whether a value is "empty".
@@ -15409,7 +28492,7 @@ var toString$7 = Object.prototype.toString;
* @return {Boolean}
*/
-function isEmpty$1(val) {
+function isEmpty(val) {
// Null and Undefined...
if (val == null) return true
@@ -15432,7 +28515,7 @@ function isEmpty$1(val) {
if (val instanceof Error) return val.message === ''
// Objects...
- if (val.toString == toString$7) {
+ if (val.toString == toString$1) {
switch (val.toString()) {
// Maps, Sets, Files and Errors...
@@ -15463,89 +28546,107 @@ function isEmpty$1(val) {
* @type {Function}
*/
-var lib$5 = isEmpty$1;
+var lib$1 = isEmpty;
-var debug$9 = src.exports('unified-engine:file-pipeline:configure');
-var stats$6 = vfileStatistics;
-var empty$3 = lib$5;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Callback} Callback
+ * @typedef {import('./index.js').Context} Context
+ */
-var configure_1$1 = configure$5;
+const debug$7 = createDebug('unified-engine:file-pipeline:configure');
-// Collect configuration for a file based on the context.
-function configure$5(context, file, fileSet, next) {
- if (stats$6(file).fatal) {
+/**
+ * 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()
}
- context.configuration.load(file.path, handleConfiguration);
-
- function handleConfiguration(error, configuration) {
- var index = -1;
- var plugin;
- var options;
+ context.configuration.load(file.path, (error, configuration) => {
+ let index = -1;
- if (error) {
+ if (!configuration) {
return next(error)
}
+ // Could be missing if a `configTransform` returns weird things.
+ /* c8 ignore next 1 */
+ const plugins = configuration.plugins || [];
+
// Store configuration on the context object.
- debug$9('Using settings `%j`', configuration.settings);
+ debug$7('Using settings `%j`', configuration.settings);
context.processor.data('settings', configuration.settings);
- debug$9('Using `%d` plugins', configuration.plugins.length);
+ debug$7('Using `%d` plugins', plugins.length);
- while (++index < configuration.plugins.length) {
- plugin = configuration.plugins[index][0];
- options = configuration.plugins[index][1];
+ while (++index < plugins.length) {
+ const plugin = plugins[index][0];
+ let options = plugins[index][1];
if (options === false) {
continue
}
// Allow for default arguments in es2020.
- if (options === null || (typeof options === 'object' && empty$3(options))) {
+ /* c8 ignore next 6 */
+ if (
+ options === null ||
+ (typeof options === 'object' && lib$1(options))
+ ) {
options = undefined;
}
- debug$9(
+ debug$7(
'Using plugin `%s`, with options `%j`',
+ // @ts-expect-error: `displayName` sure can exist on functions.
plugin.displayName || plugin.name || 'function',
options
);
try {
- context.processor.use(plugin, options, fileSet);
+ context.processor.use(plugin, options, context.fileSet);
+ /* Should not happen anymore! */
+ /* c8 ignore next 3 */
} catch (error_) {
- /* istanbul ignore next - Should not happen anymore! */
return next(error_)
}
}
next();
- }
+ });
}
-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;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('./index.js').Context} Context
+ */
-// Fill a file with a tree.
-function parse$a(context, file) {
- var message;
+const debug$6 = createDebug('unified-engine:file-pipeline:parse');
- if (stats$5(file).fatal) {
+/**
+ * Fill a file with a tree.
+ *
+ * @param {Context} context
+ * @param {VFile} file
+ */
+function parse$2(context, file) {
+ if (statistics(file).fatal) {
return
}
- if (context.treeIn) {
- debug$8('Not parsing already parsed document');
+ if (context.settings.treeIn) {
+ debug$6('Not parsing already parsed document');
try {
- context.tree = json$1(file.toString());
+ context.tree = parseJson_1(file.toString());
} catch (error) {
- message = file.message(
+ const message = file.message(
new Error('Cannot read file as JSON\n' + error.message)
);
message.fatal = true;
@@ -15555,334 +28656,457 @@ function parse$a(context, file) {
// 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.extname = context.settings.extensions[0];
}
- file.contents = '';
+ file.value = '';
return
}
- debug$8('Parsing `%s`', file.path);
+ debug$6('Parsing `%s`', file.path);
context.tree = context.processor.parse(file);
- debug$8('Parsed document');
+ debug$6('Parsed document');
}
-var debug$7 = src.exports('unified-engine:file-pipeline:transform');
-var stats$4 = vfileStatistics;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Callback} Callback
+ * @typedef {import('./index.js').Context} Context
+ */
-var transform_1$1 = transform$5;
+const debug$5 = createDebug('unified-engine:file-pipeline:transform');
-// Transform the tree associated with a file with configured plugins.
-function transform$5(context, file, fileSet, next) {
- if (stats$4(file).fatal) {
+/**
+ * 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$7('Transforming document `%s`', file.path);
- context.processor.run(context.tree, file, onrun);
- }
-
- function onrun(error, node) {
- debug$7('Transformed document (error: %s)', error);
- context.tree = node;
- next(error);
+ 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);
+ });
}
}
-var debug$6 = src.exports('unified-engine:file-pipeline:queue');
-var stats$3 = vfileStatistics;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Callback} Callback
+ * @typedef {import('./index.js').Context} Context
+ */
-var queue_1 = queue$1;
+const debug$4 = createDebug('unified-engine:file-pipeline:queue');
-// 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 own$a = {}.hasOwnProperty;
+
+/**
+ * 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 (!map) {
map = {};
- fileSet.complete = map;
+ // @ts-expect-error: store a completion map on the `fileSet`.
+ context.fileSet.complete = map;
}
- debug$6('Queueing `%s`', origin);
+ debug$4('Queueing `%s`', origin);
map[origin] = next;
- fileSet.valueOf().forEach(each);
+ const files = context.fileSet.valueOf();
+ let index = -1;
+ while (++index < files.length) {
+ each(files[index]);
+ }
if (!complete) {
- debug$6('Not flushing: some files cannot be flushed');
+ debug$4('Not flushing: some files cannot be flushed');
return
}
- fileSet.complete = {};
-
- fileSet.pipeline.run(fileSet, done);
+ // @ts-expect-error: Reset map.
+ context.fileSet.complete = {};
+ context.fileSet.pipeline.run(context.fileSet, done);
+ /**
+ * @param {VFile} file
+ */
function each(file) {
- var key = file.history[0];
+ const key = file.history[0];
- if (stats$3(file).fatal) {
+ if (statistics(file).fatal) {
return
}
if (typeof map[key] === 'function') {
- debug$6('`%s` can be flushed', key);
+ debug$4('`%s` can be flushed', key);
} else {
- debug$6('Interupting flush: `%s` is not finished', key);
+ debug$4('Interupting flush: `%s` is not finished', key);
complete = false;
}
}
+ /**
+ * @param {Error|Null} error
+ */
function done(error) {
- debug$6('Flushing: all files can be flushed');
+ debug$4('Flushing: all files can be flushed');
// Flush.
for (origin in map) {
- map[origin](error);
+ if (own$a.call(map, origin)) {
+ map[origin](error);
+ }
}
}
}
-var isEmpty = lib$5;
-
-// Detect color support.
-var color$4 = true;
-
-try {
- color$4 = 'inspect' in require$$0__default['default'];
-} catch (_) {
- /* istanbul ignore next - browser */
- color$4 = false;
-}
-
-var unistUtilInspect = color$4 ? inspect$2 : /* istanbul ignore next */ noColor;
-
-inspect$2.color = inspect$2;
-noColor.color = inspect$2;
-inspect$2.noColor = noColor;
-noColor.noColor = noColor;
+var own$9 = {}.hasOwnProperty;
+var bold = ansiColor(1, 22);
var dim = ansiColor(2, 22);
var yellow = ansiColor(33, 39);
var green = ansiColor(32, 39);
-// 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'
-);
+// 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;
-// Standard keys defined by unist: https://github.com/syntax-tree/unist.
-// We don’t ignore `data` though.
-var ignore = ['type', 'value', 'children', 'position'];
-
-// Inspects a node, without using color.
-function noColor(node, pad) {
- return stripColor(inspect$2(node, pad))
+/**
+ * Inspects a node, without using color.
+ *
+ * @param {unknown} node
+ * @param {InspectOptions} [options]
+ * @returns {string}
+ */
+function inspectNoColor(node, options) {
+ return inspectColor(node, options).replace(colorExpression, '')
}
-// Inspects a node.
-function inspect$2(node, pad) {
- var result;
- var children;
- var index;
- var length;
+/**
+ * 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;
- if (node && Boolean(node.length) && typeof node !== 'string') {
- length = node.length;
- index = -1;
- result = [];
+ return inspectValue(tree)
- while (++index < length) {
- result[index] = inspect$2(node[index]);
+ /**
+ * @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)
}
- return result.join('\n')
- }
-
- if (!node || !node.type) {
- return String(node)
- }
-
- result = [formatNode(node)];
- children = node.children;
- length = children && children.length;
- index = -1;
+ // @ts-ignore looks like a single node.
+ if (node && node.type) {
+ // @ts-ignore looks like a single node.
+ return inspectTree(node)
+ }
- if (!length) {
- return result[0]
+ return inspectNonTree(node)
}
- if (!pad || typeof pad === 'number') {
- pad = '';
+ /**
+ * @param {unknown} value
+ * @returns {string}
+ */
+ function inspectNonTree(value) {
+ return JSON.stringify(value)
}
- while (++index < length) {
- node = children[index];
+ /**
+ * @param {Node[]} nodes
+ * @returns {string}
+ */
+ function inspectNodes(nodes) {
+ /** @type {Array.<string>} */
+ var result = [];
+ var index = -1;
- if (index === length - 1) {
- result.push(formatNesting(pad + '└─ ') + inspect$2(node, pad + ' '));
- } else {
- result.push(formatNesting(pad + '├─ ') + inspect$2(node, pad + '│ '));
+ while (++index < nodes.length) {
+ result.push(
+ dim((index < nodes.length - 1 ? '├' : '└') + '─' + index) +
+ ' ' +
+ indent(
+ inspectValue(nodes[index]),
+ (index < nodes.length - 1 ? dim('│') : ' ') + ' ',
+ true
+ )
+ );
}
- }
- 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
+ return result.join('\n')
}
- values = [[pos.line || 1, pos.column || 1].join(':')];
+ /**
+ * @param {Object.<string, unknown>} object
+ * @returns {string}
+ */
+ function inspectFields(object) {
+ /** @type {Array.<string>} */
+ var result = [];
+ /** @type {string} */
+ var key;
+ /** @type {unknown} */
+ var value;
+ /** @type {string} */
+ var formatted;
- if ('offset' in pos) {
- values.push(String(pos.offset || 0));
- }
+ for (key in object) {
+ /* c8 ignore next 1 */
+ if (!own$9.call(object, key)) continue
- return values
-}
+ value = object[key];
-// Compile a location.
-function stringify$c(start, end) {
- var values = [];
- var positions = [];
- var offsets = [];
+ if (
+ value === undefined ||
+ // Standard keys defined by unist that we format differently.
+ // <https://github.com/syntax-tree/unist>
+ 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
+ }
- add(start);
- add(end);
+ // 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);
+ }
- if (positions.length !== 0) {
- values.push(positions.join('-'));
+ result.push(
+ key + dim(':') + (/\s/.test(formatted.charAt(0)) ? '' : ' ') + formatted
+ );
+ }
+
+ return indent(
+ result.join('\n'),
+ // @ts-ignore looks like a parent node.
+ (object.children && object.children.length > 0 ? dim('│') : ' ') + ' '
+ )
}
- if (offsets.length !== 0) {
- values.push(offsets.join('-'));
+ /**
+ * @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')
}
- return values.join(', ')
+ /**
+ * 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) : '';
- // Add a position.
- function add(position) {
- var tuple = compile$2(position);
+ if (typeof kind === 'string') {
+ result.push('<', kind, '>');
+ }
- if (tuple) {
- positions.push(tuple[0]);
+ 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 (tuple[1]) {
- offsets.push(tuple[1]);
- }
+ if (position) {
+ result.push(' ', dim('('), position, dim(')'));
}
+
+ return result.join('')
}
}
-// 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;
+/**
+ * @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 (node.children) {
- log += dim('[') + yellow(node.children.length) + dim(']');
- } else if (typeof node.value === 'string') {
- log += dim(': ') + green(JSON.stringify(node.value));
- }
+ if (!value) return value
- if (position) {
- log += ' (' + position + ')';
+ while (++index < lines.length) {
+ lines[index] = indentation + lines[index];
}
- for (key in node) {
- value = node[key];
+ return lines.join('\n')
+}
- if (
- ignore.indexOf(key) !== -1 ||
- value === null ||
- value === undefined ||
- (typeof value === 'object' && isEmpty(value))
- ) {
- continue
- }
+/**
+ * @param {Position} value
+ * @returns {string}
+ */
+function stringifyPosition(value) {
+ /** @type {Position} */
+ // @ts-ignore
+ var position = value || {};
+ /** @type {Array.<string>} */
+ var result = [];
+ /** @type {Array.<string>} */
+ var positions = [];
+ /** @type {Array.<string>} */
+ var offsets = [];
- values.push('[' + key + '=' + JSON.stringify(value) + ']');
- }
+ point(position.start);
+ point(position.end);
- if (values.length !== 0) {
- log += ' ' + values.join('');
- }
+ if (positions.length > 0) result.push(positions.join('-'));
+ if (offsets.length > 0) result.push(offsets.join('-'));
- return log
-}
+ return result.join(', ')
-// Remove ANSI colour from `value`.
-function stripColor(value) {
- return value.replace(colorExpression, '')
+ /**
+ * @param {Point} value
+ */
+ function point(value) {
+ if (value) {
+ positions.push((value.line || 1) + ':' + (value.column || 1));
+
+ if ('offset' in value) {
+ offsets.push(String(value.offset || 0));
+ }
+ }
+ }
}
-// Factory to wrap values in ANSI colours.
+/**
+ * Factory to wrap values in ANSI colours.
+ *
+ * @param {number} open
+ * @param {number} close
+ * @returns {function(string): string}
+ */
function ansiColor(open, close) {
return color
+ /**
+ * @param {string} value
+ * @returns {string}
+ */
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;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('./index.js').Context} Context
+ */
-var stringify_1 = stringify$b;
+const debug$3 = createDebug('unified-engine:file-pipeline:stringify');
-// Stringify a tree.
-function stringify$b(context, file) {
- var value;
+/**
+ * Stringify a tree.
+ *
+ * @param {Context} context
+ * @param {VFile} file
+ */
+function stringify$1(context, file) {
+ /** @type {unknown} */
+ let value;
- if (stats$2(file).fatal) {
- debug$5('Not compiling failed document');
+ if (statistics(file).fatal) {
+ debug$3('Not compiling failed document');
return
}
- if (!context.output && !context.out && !context.alwaysStringify) {
- debug$5('Not compiling document without output settings');
+ if (
+ !context.settings.output &&
+ !context.settings.out &&
+ !context.settings.alwaysStringify
+ ) {
+ debug$3('Not compiling document without output settings');
return
}
- debug$5('Compiling `%s`', file.path);
+ debug$3('Compiling `%s`', file.path);
- if (context.inspect) {
+ if (context.settings.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) {
+ 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) {
@@ -15892,282 +29116,317 @@ function stringify$b(context, file) {
// 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);
}
- if (value === undefined || value === null) ; else if (typeof value === 'string' || buffer$3(value)) {
- file.contents = value;
+ 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;
}
- debug$5('Serialized document');
+ debug$3('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');
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Callback} Callback
+ * @typedef {import('./index.js').Context} Context
+ */
-var copy_1 = copy$4;
+const debug$2 = createDebug('unified-engine:file-pipeline:copy');
-// Move a file.
-function copy$4(context, file, fileSet, next) {
- var output = context.output;
- var outpath = output;
- var currentPath = file.path;
+/**
+ * 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;
- if (typeof outpath !== 'string') {
- debug$4('Not copying');
- return next()
+ if (typeof output !== 'string') {
+ debug$2('Not copying');
+ next();
+ return
}
- outpath = path$5.resolve(context.cwd, outpath);
+ const outpath = path$c.resolve(context.settings.cwd, output);
- debug$4('Copying `%s`', currentPath);
+ debug$2('Copying `%s`', currentPath);
- fs$5.stat(outpath, onstatfile);
-
- function onstatfile(error, stats) {
+ fs$a.stat(outpath, (error, stats) => {
if (error) {
if (
error.code !== 'ENOENT' ||
- output.charAt(output.length - 1) === path$5.sep
+ output.charAt(output.length - 1) === path$c.sep
) {
return next(
new Error('Cannot read output directory. Error:\n' + error.message)
)
}
- fs$5.stat(path$5.dirname(outpath), onstatparent);
+ // 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());
}
- }
-
- // 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);
- }
- }
+ });
+ /**
+ * @param {boolean} directory
+ */
function done(directory) {
- if (!directory && fileSet.expected > 1) {
+ if (!directory && context.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);
+ file[directory ? 'dirname' : 'path'] = path$c.relative(file.cwd, outpath);
- debug$4('Copying document from %s to %s', currentPath, file.path);
+ debug$2('Copying document from %s to %s', currentPath, file.path);
next();
}
}
-var debug$3 = src.exports('unified-engine:file-pipeline:stdout');
-var stats$1 = vfileStatistics;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Callback} Callback
+ * @typedef {import('./index.js').Context} Context
+ */
-var stdout_1 = stdout$1;
+const debug$1 = createDebug('unified-engine:file-pipeline:stdout');
-// 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) {
+/**
+ * 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$3('Ignoring programmatically added file');
+ debug$1('Ignoring programmatically added file');
next();
- } else if (stats$1(file).fatal || context.output || !context.out) {
- debug$3('Ignoring writing to `streamOut`');
+ } else if (
+ statistics(file).fatal ||
+ context.settings.output ||
+ !context.settings.out
+ ) {
+ debug$1('Ignoring writing to `streamOut`');
next();
} else {
- debug$3('Writing document to `streamOut`');
- context.streamOut.write(file.toString(), next);
+ debug$1('Writing document to `streamOut`');
+ context.settings.streamOut.write(file.toString(), next);
}
}
-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;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Callback} Callback
+ * @typedef {import('./index.js').Context} Context
+ */
-// Write a virtual file to the file-system.
-// Ignored when `output` is not given.
-function fileSystem$2(context, file, fileSet, next) {
- var destinationPath;
+const debug = createDebug('unified-engine:file-pipeline:file-system');
- if (!context.output) {
- debug$2('Ignoring writing to file-system');
+/**
+ * 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()
}
if (!file.data.unifiedEngineGiven) {
- debug$2('Ignoring programmatically added file');
+ debug('Ignoring programmatically added file');
return next()
}
- destinationPath = file.path;
+ let destinationPath = file.path;
if (!destinationPath) {
- debug$2('Cannot write file without a `destinationPath`');
+ debug('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');
+ if (statistics(file).fatal) {
+ debug('Cannot write file with a fatal error');
return next()
}
- destinationPath = path$4.resolve(context.cwd, destinationPath);
- debug$2('Writing document to `%s`', destinationPath);
+ destinationPath = path$c.resolve(context.settings.cwd, destinationPath);
+ debug('Writing document to `%s`', destinationPath);
file.stored = true;
-
- fs$4.writeFile(destinationPath, file.toString(), next);
+ fs$a.writeFile(destinationPath, file.toString(), next);
}
-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;
+/**
+ * @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
+ */
// 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`.
+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)));
+
+/**
+ * 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
- // Run the bound bound pipe and handles any errors.
- function run(context, file, fileSet, next) {
- pipe.run(context, file, fileSet, one);
-
- function one(error) {
- var messages = file.messages;
- var index;
+ /**
+ * 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;
if (error) {
- index = messages.indexOf(error);
+ const index = messages.indexOf(error);
if (index === -1) {
- error = file.message(error);
- index = messages.length - 1;
+ Object.assign(file.message(error), {fatal: true});
+ } else {
+ messages[index].fatal = true;
}
-
- messages[index].fatal = true;
}
next();
- }
+ });
}
}
-var FileSet = fileSet;
-var filePipeline = filePipeline$1;
-
-var transform_1 = transform$3;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('trough').Callback} Callback
+ * @typedef {import('./index.js').Settings} Settings
+ * @typedef {import('./index.js').Configuration} Configuration
+ */
-// Transform all files.
-function transform$3(context, settings, next) {
- var fileSet = new FileSet();
+/**
+ * Transform all files.
+ *
+ * @param {Context} context
+ * @param {Settings} settings
+ * @param {Callback} next
+ */
+function transform$1(context, settings, next) {
+ const fileSet = new FileSet();
context.fileSet = fileSet;
- fileSet.on('add', add).on('done', next);
-
- if (context.files.length === 0) {
- next();
- } else {
- context.files.forEach(fileSet.add, fileSet);
- }
-
- function add(file) {
+ fileSet.on('add', (/** @type {VFile} */ file) => {
filePipeline.run(
{
configuration: context.configuration,
+ // Needed `any`s
+ // type-coverage:ignore-next-line
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
+ fileSet,
+ settings
},
file,
- fileSet,
- done
- );
+ (/** @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 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;
+ fileSet.emit('one', file);
}
+ );
+ });
+
+ fileSet.on('done', next);
- fileSet.emit('one', file);
+ if (context.files.length === 0) {
+ next();
+ } else {
+ let index = -1;
+ while (++index < context.files.length) {
+ fileSet.add(context.files[index]);
}
}
}
-var hasFlag$1 = (flag, argv) => {
- argv = argv || process.argv;
+function hasFlag(flag, argv = process$1.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);
-};
-
-const os = require$$0__default$1['default'];
-const hasFlag = hasFlag$1;
+ const position = argv.indexOf(prefix + flag);
+ const terminatorPosition = argv.indexOf('--');
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+}
-const {env} = process;
+const {env} = process$1;
-let forceColor;
+let flagForceColor;
if (hasFlag('no-color') ||
hasFlag('no-colors') ||
hasFlag('color=false') ||
hasFlag('color=never')) {
- forceColor = 0;
+ flagForceColor = 0;
} else if (hasFlag('color') ||
hasFlag('colors') ||
hasFlag('color=true') ||
hasFlag('color=always')) {
- forceColor = 1;
+ flagForceColor = 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);
+
+function envForceColor() {
+ if ('FORCE_COLOR' in env) {
+ if (env.FORCE_COLOR === 'true') {
+ return 1;
+ }
+
+ if (env.FORCE_COLOR === 'false') {
+ return 0;
+ }
+
+ return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
}
}
@@ -16184,22 +29443,31 @@ function translateLevel(level) {
};
}
-function supportsColor(stream) {
+function _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {
+ const noFlagForceColor = envForceColor();
+ if (noFlagForceColor !== undefined) {
+ flagForceColor = noFlagForceColor;
+ }
+
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
+
if (forceColor === 0) {
return 0;
}
- if (hasFlag('color=16m') ||
- hasFlag('color=full') ||
- hasFlag('color=truecolor')) {
- return 3;
- }
+ if (sniffFlags) {
+ if (hasFlag('color=16m') ||
+ hasFlag('color=full') ||
+ hasFlag('color=truecolor')) {
+ return 3;
+ }
- if (hasFlag('color=256')) {
- return 2;
+ if (hasFlag('color=256')) {
+ return 2;
+ }
}
- if (stream && !stream.isTTY && forceColor === undefined) {
+ if (haveStream && !streamIsTTY && forceColor === undefined) {
return 0;
}
@@ -16209,16 +29477,11 @@ function supportsColor(stream) {
return min;
}
- 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 (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(process.versions.node.split('.')[0]) >= 8 &&
Number(osRelease[0]) >= 10 &&
Number(osRelease[2]) >= 10586
) {
@@ -16229,7 +29492,7 @@ function supportsColor(stream) {
}
if ('CI' in env) {
- if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
+ if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
return 1;
}
@@ -16245,7 +29508,7 @@ function supportsColor(stream) {
}
if ('TERM_PROGRAM' in env) {
- const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
+ const version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
switch (env.TERM_PROGRAM) {
case 'iTerm.app':
@@ -16271,94 +29534,84 @@ function supportsColor(stream) {
return min;
}
-function getSupportLevel(stream) {
- const level = supportsColor(stream);
+function createSupportsColor(stream, options = {}) {
+ const level = _supportsColor(stream, {
+ streamIsTTY: stream && stream.isTTY,
+ ...options
+ });
+
return translateLevel(level);
}
-var supportsColor_1 = {
- supportsColor: getSupportLevel,
- stdout: getSupportLevel(process.stdout),
- stderr: getSupportLevel(process.stderr)
+const supportsColor = {
+ stdout: createSupportsColor({isTTY: tty$1.isatty(1)}),
+ stderr: createSupportsColor({isTTY: tty$1.isatty(2)})
};
-var stringWidth$1 = {exports: {}};
-
-var ansiRegex$1 = ({onlyFirst = false} = {}) => {
+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('|');
return new RegExp(pattern, onlyFirst ? undefined : 'g');
-};
-
-const ansiRegex = ansiRegex$1;
+}
-var stripAnsi$1 = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
+function stripAnsi(string) {
+ if (typeof string !== 'string') {
+ throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
+ }
-var isFullwidthCodePoint$2 = {exports: {}};
+ return string.replace(ansiRegex(), '');
+}
/* eslint-disable yoda */
-const isFullwidthCodePoint$1 = codePoint => {
- if (Number.isNaN(codePoint)) {
+function isFullwidthCodePoint(codePoint) {
+ if (!Number.isInteger(codePoint)) {
return false;
}
// 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;
- }
-
- return false;
-};
-
-isFullwidthCodePoint$2.exports = isFullwidthCodePoint$1;
-isFullwidthCodePoint$2.exports.default = isFullwidthCodePoint$1;
+ // 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)
+ );
+}
-var emojiRegex$1 = function () {
+var emojiRegex = 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 /\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;
};
-const stripAnsi = stripAnsi$1;
-const isFullwidthCodePoint = isFullwidthCodePoint$2.exports;
-const emojiRegex = emojiRegex$1;
-
-const stringWidth = string => {
+function stringWidth(string) {
if (typeof string !== 'string' || string.length === 0) {
return 0;
}
@@ -16373,33 +29626,29 @@ const stringWidth = string => {
let width = 0;
- for (let i = 0; i < string.length; i++) {
- const code = string.codePointAt(i);
+ for (let index = 0; index < string.length; index++) {
+ const codePoint = string.codePointAt(index);
// Ignore control characters
- if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {
+ if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {
continue;
}
// Ignore combining characters
- if (code >= 0x300 && code <= 0x36F) {
+ if (codePoint >= 0x300 && codePoint <= 0x36F) {
continue;
}
// Surrogates
- if (code > 0xFFFF) {
- i++;
+ if (codePoint > 0xFFFF) {
+ index++;
}
- width += isFullwidthCodePoint(code) ? 2 : 1;
+ width += isFullwidthCodePoint(codePoint) ? 2 : 1;
}
return width;
-};
-
-stringWidth$1.exports = stringWidth;
-// TODO: remove this in the next major version
-stringWidth$1.exports.default = stringWidth;
+}
/*!
* repeat-string <https://github.com/jonschlinkert/repeat-string>
@@ -16419,7 +29668,7 @@ var cache;
* Expose `repeat`
*/
-var repeatString = repeat$7;
+var repeatString = repeat;
/**
* Repeat the given `string` the specified `number`
@@ -16439,7 +29688,7 @@ var repeatString = repeat$7;
* @api public
*/
-function repeat$7(str, num) {
+function repeat(str, num) {
if (typeof str !== 'string') {
throw new TypeError('expected a string');
}
@@ -16470,68 +29719,115 @@ function repeat$7(str, num) {
return res;
}
-var vfileSort = sort$1;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('vfile-message').VFileMessage} VFileMessage
+ */
-var severities = {
- true: 2,
- false: 1,
- null: 0,
- undefined: 0
-};
+var severities = {true: 2, false: 1, null: 0, undefined: 0};
-function sort$1(file) {
+/**
+ * @template {VFile} F
+ * @param {F} file
+ * @returns {F}
+ */
+function sort(file) {
file.messages.sort(comparator);
return file
}
+/**
+ * @param {VFileMessage} a
+ * @param {VFileMessage} b
+ * @returns {number}
+ */
function comparator(a, b) {
return (
- check$4(a, b, 'line') ||
- check$4(a, b, 'column') ||
+ check$1(a, b, 'line') ||
+ check$1(a, b, 'column') ||
severities[b.fatal] - severities[a.fatal] ||
- compare$3(a, b, 'source') ||
- compare$3(a, b, 'ruleId') ||
- compare$3(a, b, 'reason') ||
+ compare(a, b, 'source') ||
+ compare(a, b, 'ruleId') ||
+ compare(a, b, 'reason') ||
0
)
}
-function check$4(a, b, property) {
+/**
+ * @param {VFileMessage} a
+ * @param {VFileMessage} b
+ * @param {string} property
+ * @returns {number}
+ */
+function check$1(a, b, property) {
return (a[property] || 0) - (b[property] || 0)
}
-function compare$3(a, b, property) {
- return (a[property] || '').localeCompare(b[property] || '')
+/**
+ * @param {VFileMessage} a
+ * @param {VFileMessage} b
+ * @param {string} property
+ * @returns {number}
+ */
+function compare(a, b, property) {
+ return String(a[property] || '').localeCompare(b[property] || '')
}
-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;
+/**
+ * @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='<stdin>']
+ *
+ * @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
+ */
-var vfileReporter = reporter$1;
+var own$8 = {}.hasOwnProperty;
-var push$1 = [].push;
+// @ts-ignore Types are incorrect.
+var supported = supportsColor.stderr.hasBasic;
-// `log-symbols` without chalk:
-/* istanbul ignore next - Windows. */
-var chars$1 =
+// `log-symbols` without chalk, ignored for Windows:
+/* c8 ignore next 4 */
+var chars =
process.platform === 'win32'
? {error: '×', warning: '‼'}
: {error: '✖', warning: '⚠'};
-var labels = {
- true: 'error',
- false: 'warning',
- null: 'info',
- undefined: 'info'
-};
+var labels = {true: 'error', false: 'warning', null: 'info', undefined: 'info'};
-// Report a file’s messages.
-function reporter$1(files, options) {
- var settings = options || {};
+/**
+ * Report a file’s messages.
+ *
+ * @param {Error|VFile|Array.<VFile>} [files]
+ * @param {Options} [options]
+ * @returns {string}
+ */
+function reporter$1(files, options = {}) {
+ /** @type {boolean} */
var one;
if (!files) {
@@ -16544,28 +29840,43 @@ function reporter$1(files, options) {
}
// One file.
- if (!('length' in files)) {
+ if (!Array.isArray(files)) {
one = true;
files = [files];
}
- return format(transform$2(files, settings), one, settings)
+ return format(transform(files, options), one, options)
}
-function transform$2(files, options) {
+/**
+ * @param {Array.<VFile>} files
+ * @param {Options} options
+ * @returns {_Info}
+ */
+function transform(files, options) {
var index = -1;
+ /** @type {Array.<_FileRow|_Row>} */
var rows = [];
+ /** @type {Array.<VFileMessage>} */
var all = [];
+ /** @type {number} */
+ var offset;
+ /** @type {_Sizes} */
var sizes = {};
+ /** @type {Array.<VFileMessage>} */
var messages;
- var offset;
+ /** @type {VFileMessage} */
var message;
- var messageRows;
+ /** @type {_Row} */
var row;
+ /** @type {Array.<_Row>} */
+ var messageRows;
+ /** @type {string} */
var key;
while (++index < files.length) {
- messages = sort({messages: files[index].messages.concat()}).messages;
+ // @ts-ignore it works fine.
+ messages = sort({messages: [...files[index].messages]}).messages;
messageRows = [];
offset = -1;
@@ -16576,10 +29887,10 @@ function transform$2(files, options) {
all.push(message);
row = {
- location: stringify$9(
- message.location.end.line && message.location.end.column
- ? message.location
- : message.location.start
+ place: stringifyPosition$1(
+ message.position.end.line && message.position.end.column
+ ? message.position
+ : message.position.start
),
label: labels[message.fatal],
reason:
@@ -16590,37 +29901,57 @@ function transform$2(files, options) {
};
for (key in row) {
- sizes[key] = Math.max(size$1(row[key]), sizes[key] || 0);
+ if (own$8.call(row, key)) {
+ sizes[key] = Math.max(size$1(row[key]), sizes[key] || 0);
+ }
}
messageRows.push(row);
}
}
- if ((!options.quiet && !options.silent) || messageRows.length) {
- rows.push({type: 'file', file: files[index], stats: statistics$1(messages)});
- push$1.apply(rows, messageRows);
+ if ((!options.quiet && !options.silent) || messageRows.length > 0) {
+ rows.push(
+ {type: 'file', file: files[index], stats: statistics(messages)},
+ ...messageRows
+ );
}
}
- return {rows: rows, stats: statistics$1(all), sizes: sizes}
+ return {rows, stats: statistics(all), sizes}
}
+/**
+ * @param {_Info} map
+ * @param {boolean} one
+ * @param {Options} options
+ */
function format(map, one, options) {
- var enabled = options.color == null ? supported : options.color;
+ /** @type {boolean} */
+ var enabled =
+ options.color === undefined || options.color === null
+ ? supported
+ : options.color;
+ /** @type {Array.<string>} */
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;
while (++index < map.rows.length) {
row = map.rows[index];
- if (row.type === 'file') {
+ if ('type' in row) {
stats = row.stats;
line = row.file.history[0] || options.defaultName || '<stdin>';
@@ -16628,14 +29959,14 @@ function format(map, one, options) {
one && !options.defaultName && !row.file.history[0]
? ''
: (enabled
- ? '\x1b[4m' /* Underline. */ +
+ ? '\u001B[4m' /* Underline. */ +
(stats.fatal
- ? '\x1b[31m' /* Red. */
+ ? '\u001B[31m' /* Red. */
: stats.total
- ? '\x1b[33m' /* Yellow. */
- : '\x1b[32m') /* Green. */ +
+ ? '\u001B[33m' /* Yellow. */
+ : '\u001B[32m') /* Green. */ +
line +
- '\x1b[39m\x1b[24m'
+ '\u001B[39m\u001B[24m'
: line) +
(row.file.stored && row.file.path !== row.file.history[0]
? ' > ' + row.file.path
@@ -16646,13 +29977,13 @@ function format(map, one, options) {
(line ? line + ': ' : '') +
(row.file.stored
? enabled
- ? '\x1b[33mwritten\x1b[39m' /* Yellow. */
+ ? '\u001B[33mwritten\u001B[39m' /* Yellow. */
: 'written'
: 'no issues found');
}
if (line) {
- if (index && map.rows[index - 1].type !== 'file') {
+ if (index && !('type' in map.rows[index - 1])) {
lines.push('');
}
@@ -16672,23 +30003,23 @@ function format(map, one, options) {
lines.push(
(
' ' +
- repeat$6(' ', map.sizes.location - size$1(row.location)) +
- row.location +
+ repeatString(' ', map.sizes.place - size$1(row.place)) +
+ row.place +
' ' +
(enabled
? (row.label === 'error'
- ? '\x1b[31m' /* Red. */
- : '\x1b[33m') /* Yellow. */ +
+ ? '\u001B[31m' /* Red. */
+ : '\u001B[33m') /* Yellow. */ +
row.label +
- '\x1b[39m'
+ '\u001B[39m'
: row.label) +
- repeat$6(' ', map.sizes.label - size$1(row.label)) +
+ repeatString(' ', map.sizes.label - size$1(row.label)) +
' ' +
reason +
- repeat$6(' ', map.sizes.reason - size$1(reason)) +
+ repeatString(' ', map.sizes.reason - size$1(reason)) +
' ' +
row.ruleId +
- repeat$6(' ', map.sizes.ruleId - size$1(row.ruleId)) +
+ repeatString(' ', map.sizes.ruleId - size$1(row.ruleId)) +
' ' +
(row.source || '')
).replace(/ +$/, '') + rest
@@ -16704,8 +30035,8 @@ function format(map, one, options) {
if (stats.fatal) {
line =
(enabled
- ? '\x1b[31m' /* Red. */ + chars$1.error + '\x1b[39m'
- : chars$1.error) +
+ ? '\u001B[31m' /* Red. */ + chars.error + '\u001B[39m'
+ : chars.error) +
' ' +
stats.fatal +
' ' +
@@ -16716,8 +30047,8 @@ function format(map, one, options) {
line =
(line ? line + ', ' : '') +
(enabled
- ? '\x1b[33m' /* Yellow. */ + chars$1.warning + '\x1b[39m'
- : chars$1.warning) +
+ ? '\u001B[33m' /* Yellow. */ + chars.warning + '\u001B[39m'
+ : chars.warning) +
' ' +
stats.warn +
' ' +
@@ -16734,32 +30065,54 @@ function format(map, one, options) {
return lines.join('\n')
}
-// Get the length of `value`, ignoring ANSI sequences.
+/**
+ * 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 width(match ? value.slice(0, match.index) : value)
+ return stringWidth(match ? value.slice(0, match.index) : value)
}
-var load$2 = loadPlugin_1;
-var report = vfileReporter;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('../index.js').VFileReporter} VFileReporter
+ * @typedef {import('./index.js').Settings} Settings
+ * @typedef {import('./index.js').Configuration} Configuration
+ */
-var log_1 = log$1;
+/**
+ * @typedef Context
+ * @property {Array.<VFile>} files
+ * @property {Configuration} [configuration]
+ */
-function log$1(context, settings, next) {
- var reporter = settings.reporter || report;
- var diagnostics;
+/**
+ * @param {Context} context
+ * @param {Settings} settings
+ */
+async function log(context, settings) {
+ /** @type {VFileReporter} */
+ let func = reporter$1;
- if (typeof reporter === 'string') {
+ if (typeof settings.reporter === 'string') {
try {
- reporter = load$2(reporter, {cwd: settings.cwd, prefix: 'vfile-reporter'});
- } catch (_) {
- next(new Error('Could not find reporter `' + reporter + '`'));
- return
+ // @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 + '`')
}
+ } else if (settings.reporter) {
+ func = settings.reporter;
}
- diagnostics = reporter(
- context.files.filter(given),
+ let diagnostics = func(
+ context.files.filter((file) => file.data.unifiedEngineGiven),
Object.assign({}, settings.reporterOptions, {
quiet: settings.quiet,
silent: settings.silent,
@@ -16772,80 +30125,247 @@ function log$1(context, settings, next) {
diagnostics += '\n';
}
- settings.streamError.write(diagnostics, next);
- } else {
- next();
+ return new Promise((resolve) => {
+ settings.streamError.write(diagnostics, resolve);
+ })
}
}
-function given(file) {
- return file.data.unifiedEngineGiven
-}
-
-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;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('../configuration.js').Configuration} Configuration
+ * @typedef {import('../index.js').Settings} Settings
+ */
-var fileSetPipeline$1 = trough$1()
+const fileSetPipeline = trough()
.use(configure$3)
- .use(fileSystem)
+ .use(fileSystem$1)
.use(stdin)
.use(transform$1)
.use(log);
-var PassThrough = require$$0__default$5['default'].PassThrough;
-var statistics = vfileStatistics;
-var fileSetPipeline = fileSetPipeline$1;
-
-var lib$4 = run;
+/**
+ * @typedef {import('vfile').VFile} VFile
+ * @typedef {import('unified').Processor<any, any, any, any>} 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<Options['cwd'], undefined>} cwd
+ * @property {Exclude<Options['files'], undefined>} files
+ * @property {Exclude<Options['extensions'], undefined>} extensions
+ * @property {Exclude<Options['streamIn'], undefined>} streamIn
+ * @property {Options['filePath']} filePath
+ * @property {Exclude<Options['streamOut'], undefined>} streamOut
+ * @property {Exclude<Options['streamError'], undefined>} 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<Options['settings'], undefined>} settings
+ * @property {Options['ignoreName']} ignoreName
+ * @property {Options['detectIgnore']} detectIgnore
+ * @property {Options['ignorePath']} ignorePath
+ * @property {Options['ignorePathResolveFrom']} ignorePathResolveFrom
+ * @property {Exclude<Options['ignorePatterns'], undefined>} 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<string|VFile>} [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}
+ */
-// 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;
+/**
+ * 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();
try {
- stdin = process.stdin;
- } catch (_) {
+ stdin = process$2.stdin;
// Obscure bug in Node (seen on Windows).
// See: <https://github.com/nodejs/node/blob/f856234/lib/internal/process/stdio.js#L82>,
// <https://github.com/AtomLinter/linter-markdown/pull/85>.
- }
+ /* c8 ignore next 1 */
+ } catch {}
if (!callback) {
throw new Error('Missing `callback`')
}
+ // Needed `any`s
+ // type-coverage:ignore-next-line
if (!options || !options.processor) {
return next(new Error('Missing `processor`'))
}
// Processor.
+ // Needed `any`s
+ // type-coverage:ignore-next-line
settings.processor = options.processor;
// Path to run as.
- settings.cwd = options.cwd || process.cwd();
+ settings.cwd = options.cwd || process$2.cwd();
// Input.
settings.files = options.files || [];
- settings.extensions = (options.extensions || []).map(extension$2);
+ settings.extensions = (options.extensions || []).map((ext) =>
+ ext.charAt(0) === '.' ? ext : '.' + ext
+ );
- settings.filePath = options.filePath || null;
+ settings.filePath = options.filePath;
settings.streamIn = options.streamIn || stdin;
// Output.
- settings.streamOut = options.streamOut || process.stdout;
- settings.streamError = options.streamError || process.stderr;
+ 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;
@@ -16860,7 +30380,7 @@ function run(options, callback) {
}
// Process phase management.
- tree = options.tree || false;
+ const tree = options.tree || false;
settings.treeIn = options.treeIn;
settings.treeOut = options.treeOut;
@@ -16875,8 +30395,8 @@ function run(options, callback) {
}
// Configuration.
- detectConfig = options.detectConfig;
- hasConfig = Boolean(options.rcName || options.packageField);
+ const detectConfig = options.detectConfig;
+ const hasConfig = Boolean(options.rcName || options.packageField);
if (detectConfig && !hasConfig) {
return next(
@@ -16888,23 +30408,23 @@ function run(options, callback) {
detectConfig === null || detectConfig === undefined
? hasConfig
: detectConfig;
- settings.rcName = options.rcName || null;
- settings.rcPath = options.rcPath || null;
- settings.packageField = options.packageField || null;
+ settings.rcName = options.rcName;
+ settings.rcPath = options.rcPath;
+ settings.packageField = options.packageField;
settings.settings = options.settings || {};
settings.configTransform = options.configTransform;
settings.defaultConfig = options.defaultConfig;
// Ignore.
- detectIgnore = options.detectIgnore;
- hasIgnore = Boolean(options.ignoreName);
+ const detectIgnore = options.detectIgnore;
+ const hasIgnore = Boolean(options.ignoreName);
settings.detectIgnore =
detectIgnore === null || detectIgnore === undefined
? hasIgnore
: detectIgnore;
- settings.ignoreName = options.ignoreName || null;
- settings.ignorePath = options.ignorePath || null;
+ settings.ignoreName = options.ignoreName;
+ settings.ignorePath = options.ignorePath;
settings.ignorePathResolveFrom = options.ignorePathResolveFrom || 'dir';
settings.ignorePatterns = options.ignorePatterns || [];
settings.silentlyIgnore = Boolean(options.silentlyIgnore);
@@ -16914,23 +30434,27 @@ function run(options, callback) {
}
// Plugins.
- settings.pluginPrefix = options.pluginPrefix || null;
- settings.plugins = options.plugins || {};
+ settings.pluginPrefix = options.pluginPrefix;
+ settings.plugins = options.plugins || [];
// Reporting.
- settings.reporter = options.reporter || null;
- settings.reporterOptions = options.reporterOptions || null;
+ settings.reporter = options.reporter;
+ settings.reporterOptions = options.reporterOptions;
settings.color = options.color || false;
- settings.silent = options.silent || false;
- settings.quiet = options.quiet || false;
- settings.frail = options.frail || false;
+ settings.silent = options.silent;
+ settings.quiet = options.quiet;
+ settings.frail = options.frail;
// Process.
fileSetPipeline.run({files: options.files || []}, settings, next);
+ /**
+ * @param {Error|null} error
+ * @param {Context} [context]
+ */
function next(error, context) {
- var stats = statistics((context || {}).files);
- var failed = Boolean(
+ const stats = statistics((context || {}).files);
+ const failed = Boolean(
settings.frail ? stats.fatal || stats.warn : stats.fatal
);
@@ -16942,8246 +30466,6 @@ function run(options, callback) {
}
}
-function extension$2(ext) {
- return ext.charAt(0) === '.' ? ext : '.' + ext
-}
-
-var ansiStyles$1 = {exports: {}};
-
-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]
-};
-
-/* 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(cssKeywords)) {
- reverseKeywords[cssKeywords[key]] = key;
-}
-
-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']}
-};
-
-var conversions$2 = convert$4;
-
-// 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);
- }
-
- if (!('labels' in convert$4[model])) {
- throw new Error('missing channel labels property: ' + model);
- }
-
- if (convert$4[model].labels.length !== convert$4[model].channels) {
- throw new Error('channel and label counts mismatch: ' + model);
- }
-
- 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});
-}
-
-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;
-
- 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;
- }
-
- h = Math.min(h * 60, 360);
-
- if (h < 0) {
- h += 360;
- }
-
- const l = (min + max) / 2;
-
- if (max === min) {
- s = 0;
- } else if (l <= 0.5) {
- s = delta / (max + min);
- } else {
- s = delta / (2 - max - min);
- }
-
- return [h, s * 100, l * 100];
-};
-
-convert$4.rgb.hsv = function (rgb) {
- let rdif;
- let gdif;
- let bdif;
- let h;
- let s;
-
- 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 (diff === 0) {
- h = 0;
- s = 0;
- } else {
- s = diff / v;
- rdif = diffc(r);
- gdif = diffc(g);
- bdif = diffc(b);
-
- 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;
- }
- }
-
- return [
- h * 360,
- s * 100,
- v * 100
- ];
-};
-
-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));
-
- b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
-
- return [h, w * 100, b * 100];
-};
-
-convert$4.rgb.cmyk = function (rgb) {
- const r = rgb[0] / 255;
- const g = rgb[1] / 255;
- const b = rgb[2] / 255;
-
- 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;
-
- return [c * 100, m * 100, y * 100, k * 100];
-};
-
-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)
- );
-}
-
-convert$4.rgb.keyword = function (rgb) {
- const reversed = reverseKeywords[rgb];
- if (reversed) {
- return reversed;
- }
-
- let currentClosestDistance = Infinity;
- let currentClosestKeyword;
-
- for (const keyword of Object.keys(cssKeywords)) {
- const value = cssKeywords[keyword];
-
- // Compute comparative distance
- const distance = comparativeDistance(rgb, value);
-
- // Check if its less, if so set as closest
- if (distance < currentClosestDistance) {
- currentClosestDistance = distance;
- currentClosestKeyword = keyword;
- }
- }
-
- return currentClosestKeyword;
-};
-
-convert$4.keyword.rgb = function (keyword) {
- return cssKeywords[keyword];
-};
-
-convert$4.rgb.xyz = function (rgb) {
- let r = rgb[0] / 255;
- let g = rgb[1] / 255;
- let b = rgb[2] / 255;
-
- // 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 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];
-};
-
-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;
-
- 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);
-
- 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;
-
- if (s === 0) {
- val = l * 255;
- return [val, val, val];
- }
-
- if (l < 0.5) {
- t2 = l * (1 + s);
- } else {
- t2 = l + s - l * s;
- }
-
- const t1 = 2 * l - t2;
-
- 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--;
- }
-
- 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;
- }
-
- return rgb;
-};
-
-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);
-
- 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 [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;
-
- 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;
-
- 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;
-
- l = (2 - s) * v;
- const lmin = (2 - s) * vmin;
- sl = s * vmin;
- sl /= (lmin <= 1) ? lmin : 2 - lmin;
- sl = sl || 0;
- l /= 2;
-
- return [h, sl * 100, l * 100];
-};
-
-// 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;
-
- // Wh + bl cant be > 1
- if (ratio > 1) {
- wh /= ratio;
- bl /= ratio;
- }
-
- const i = Math.floor(6 * h);
- const v = 1 - bl;
- f = 6 * h - i;
-
- if ((i & 0x01) !== 0) {
- f = 1 - f;
- }
-
- const n = wh + f * (v - wh); // Linear interpolation
-
- 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 [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;
-
- 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 [r * 255, g * 255, b * 255];
-};
-
-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;
-
- 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);
-
- // Assume sRGB
- r = r > 0.0031308
- ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)
- : r * 12.92;
-
- 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;
-
- 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 [r * 255, g * 255, b * 255];
-};
-
-convert$4.xyz.lab = function (xyz) {
- let x = xyz[0];
- let y = xyz[1];
- let z = xyz[2];
-
- x /= 95.047;
- y /= 100;
- z /= 108.883;
-
- 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);
-
- return [l, a, b];
-};
-
-convert$4.lab.xyz = function (lab) {
- const l = lab[0];
- const a = lab[1];
- const b = lab[2];
- let x;
- let y;
- let z;
-
- y = (l + 16) / 116;
- x = a / 500 + y;
- z = y - b / 200;
-
- 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;
-
- x *= 95.047;
- y *= 100;
- z *= 108.883;
-
- return [x, y, z];
-};
-
-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;
-
- if (h < 0) {
- h += 360;
- }
-
- const c = Math.sqrt(a * a + b * b);
-
- return [l, c, h];
-};
-
-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);
-
- 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
-
- value = Math.round(value / 50);
-
- if (value === 0) {
- return 30;
- }
-
- let ansi = 30
- + ((Math.round(b / 255) << 2)
- | (Math.round(g / 255) << 1)
- | Math.round(r / 255));
-
- if (value === 2) {
- ansi += 60;
- }
-
- return ansi;
-};
-
-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]);
-};
-
-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;
- }
-
- if (r > 248) {
- return 231;
- }
-
- return Math.round(((r - 8) / 247) * 24) + 232;
- }
-
- const ansi = 16
- + (36 * Math.round(r / 255 * 5))
- + (6 * Math.round(g / 255 * 5))
- + Math.round(b / 255 * 5);
-
- return ansi;
-};
-
-convert$4.ansi16.rgb = function (args) {
- let color = args % 10;
-
- // Handle greyscale
- if (color === 0 || color === 7) {
- if (args > 50) {
- color += 3.5;
- }
-
- color = color / 10.5 * 255;
-
- return [color, color, color];
- }
-
- 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 [r, g, b];
-};
-
-convert$4.ansi256.rgb = function (args) {
- // Handle greyscale
- if (args >= 232) {
- const c = (args - 232) * 10 + 8;
- return [c, c, c];
- }
-
- args -= 16;
-
- 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;
-
- return [r, g, b];
-};
-
-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);
-
- const string = integer.toString(16).toUpperCase();
- return '000000'.substring(string.length) + string;
-};
-
-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];
- }
-
- let colorString = match[0];
-
- 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;
-
- return [r, g, b];
-};
-
-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;
-
- if (chroma < 1) {
- grayscale = min / (1 - chroma);
- } else {
- grayscale = 0;
- }
-
- 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;
- }
-
- hue /= 6;
- hue %= 1;
-
- return [hue * 360, chroma * 100, grayscale * 100];
-};
-
-convert$4.hsl.hcg = function (hsl) {
- const s = hsl[1] / 100;
- const l = hsl[2] / 100;
-
- const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));
-
- let f = 0;
- if (c < 1.0) {
- f = (l - 0.5 * c) / (1.0 - c);
- }
-
- return [hsl[0], c * 100, f * 100];
-};
-
-convert$4.hsv.hcg = function (hsv) {
- const s = hsv[1] / 100;
- const v = hsv[2] / 100;
-
- const c = s * v;
- let f = 0;
-
- if (c < 1.0) {
- f = (v - c) / (1 - c);
- }
-
- return [hsv[0], c * 100, f * 100];
-};
-
-convert$4.hcg.rgb = function (hcg) {
- const h = hcg[0] / 360;
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
-
- if (c === 0.0) {
- return [g * 255, g * 255, g * 255];
- }
-
- const pure = [0, 0, 0];
- const hi = (h % 1) * 6;
- const v = hi % 1;
- const w = 1 - v;
- let mg = 0;
-
- /* 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 */
-
- mg = (1.0 - c) * g;
-
- return [
- (c * pure[0] + mg) * 255,
- (c * pure[1] + mg) * 255,
- (c * pure[2] + mg) * 255
- ];
-};
-
-convert$4.hcg.hsv = function (hcg) {
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
-
- const v = c + g * (1.0 - c);
- let f = 0;
-
- if (v > 0.0) {
- f = c / v;
- }
-
- return [hcg[0], f * 100, v * 100];
-};
-
-convert$4.hcg.hsl = function (hcg) {
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
-
- const l = g * (1.0 - c) + 0.5 * c;
- let s = 0;
-
- 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];
-};
-
-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];
-};
-
-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;
-
- if (c < 1) {
- g = (v - c) / (1 - c);
- }
-
- return [hwb[0], c * 100, g * 100];
-};
-
-convert$4.apple.rgb = function (apple) {
- return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
-};
-
-convert$4.rgb.apple = function (rgb) {
- return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
-};
-
-convert$4.gray.rgb = function (args) {
- return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
-};
-
-convert$4.gray.hsl = function (args) {
- return [0, 0, args[0]];
-};
-
-convert$4.gray.hsv = convert$4.gray.hsl;
-
-convert$4.gray.hwb = function (gray) {
- return [0, 100, gray[0]];
-};
-
-convert$4.gray.cmyk = function (gray) {
- return [0, 0, 0, gray[0]];
-};
-
-convert$4.gray.lab = function (gray) {
- return [gray[0], 0, 0];
-};
-
-convert$4.gray.hex = function (gray) {
- const val = Math.round(gray[0] / 100 * 255) & 0xFF;
- const integer = (val << 16) + (val << 8) + val;
-
- const string = integer.toString(16).toUpperCase();
- return '000000'.substring(string.length) + string;
-};
-
-convert$4.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.
-
- 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() {
- const graph = {};
- // https://jsperf.com/object-keys-vs-for-in-with-closure/3
- const models = Object.keys(conversions$1);
-
- 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
- };
- }
-
- return graph;
-}
-
-// https://en.wikipedia.org/wiki/Breadth-first_search
-function deriveBFS(fromModel) {
- const graph = buildGraph();
- const queue = [fromModel]; // Unshift -> queue -> pop
-
- graph[fromModel].distance = 0;
-
- while (queue.length) {
- const current = queue.pop();
- const adjacents = Object.keys(conversions$1[current]);
-
- for (let len = adjacents.length, i = 0; i < len; i++) {
- const adjacent = adjacents[i];
- const node = graph[adjacent];
-
- if (node.distance === -1) {
- node.distance = graph[current].distance + 1;
- node.parent = current;
- queue.unshift(adjacent);
- }
- }
- }
-
- return graph;
-}
-
-function link$1(from, to) {
- return function (args) {
- return to(from(args));
- };
-}
-
-function wrapConversion(toModel, graph) {
- const path = [graph[toModel].parent, toModel];
- let fn = conversions$1[graph[toModel].parent][toModel];
-
- 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;
- }
-
- fn.conversion = path;
- return fn;
-}
-
-var route$1 = function (fromModel) {
- const graph = deriveBFS(fromModel);
- const conversion = {};
-
- const models = Object.keys(graph);
- for (let len = models.length, i = 0; i < len; i++) {
- const toModel = models[i];
- const node = graph[toModel];
-
- if (node.parent === null) {
- // No possible conversion, or this node is the source model.
- continue;
- }
-
- conversion[toModel] = wrapConversion(toModel, graph);
- }
-
- return conversion;
-};
-
-const conversions = conversions$2;
-const route = route$1;
-
-const convert$3 = {};
-
-const models$3 = Object.keys(conversions);
-
-function wrapRaw(fn) {
- const wrappedFn = function (...args) {
- const arg0 = args[0];
- if (arg0 === undefined || arg0 === null) {
- return arg0;
- }
-
- if (arg0.length > 1) {
- args = arg0;
- }
-
- return fn(args);
- };
-
- // Preserve .conversion property if there is one
- if ('conversion' in fn) {
- wrappedFn.conversion = fn.conversion;
- }
-
- return wrappedFn;
-}
-
-function wrapRounded(fn) {
- const wrappedFn = function (...args) {
- const arg0 = args[0];
-
- if (arg0 === undefined || arg0 === null) {
- return arg0;
- }
-
- if (arg0.length > 1) {
- args = arg0;
- }
-
- const 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 (let 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;
- }
-
- return wrappedFn;
-}
-
-models$3.forEach(fromModel => {
- convert$3[fromModel] = {};
-
- Object.defineProperty(convert$3[fromModel], 'channels', {value: conversions[fromModel].channels});
- Object.defineProperty(convert$3[fromModel], 'labels', {value: conversions[fromModel].labels});
-
- const routes = route(fromModel);
- const routeModels = Object.keys(routes);
-
- routeModels.forEach(toModel => {
- const fn = routes[toModel];
-
- convert$3[fromModel][toModel] = wrapRounded(fn);
- convert$3[fromModel][toModel].raw = wrapRaw(fn);
- });
-});
-
-var colorConvert = convert$3;
-
-(function (module) {
-
-const wrapAnsi16 = (fn, offset) => (...args) => {
- const code = fn(...args);
- return `\u001B[${code + offset}m`;
-};
-
-const wrapAnsi256 = (fn, offset) => (...args) => {
- const code = fn(...args);
- return `\u001B[${38 + offset};5;${code}m`;
-};
-
-const wrapAnsi16m = (fn, offset) => (...args) => {
- const rgb = fn(...args);
- return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
-};
-
-const ansi2ansi = n => n;
-const rgb2rgb = (r, g, b) => [r, g, b];
-
-const setLazyProperty = (object, property, get) => {
- Object.defineProperty(object, property, {
- get: () => {
- const value = get();
-
- Object.defineProperty(object, property, {
- value,
- enumerable: true,
- configurable: true
- });
-
- return value;
- },
- enumerable: true,
- configurable: true
- });
-};
-
-/** @type {typeof import('color-convert')} */
-let colorConvert$1;
-const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {
- if (colorConvert$1 === undefined) {
- colorConvert$1 = colorConvert;
- }
-
- const offset = isBackground ? 10 : 0;
- const styles = {};
-
- 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);
- }
- }
-
- return styles;
-};
-
-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],
-
- // 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],
-
- // 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]
- }
- };
-
- // 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;
-
- 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`
- };
-
- 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
- });
-
- styles.color.close = '\u001B[39m';
- styles.bgColor.close = '\u001B[49m';
-
- 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;
-}
-
-// Make the export immutable
-Object.defineProperty(module, 'exports', {
- enumerable: true,
- get: assembleStyles
-});
-}(ansiStyles$1));
-
-const stringReplaceAll$1 = (string, substring, replacer) => {
- let index = string.indexOf(substring);
- if (index === -1) {
- return string;
- }
-
- 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);
-
- returnValue += string.substr(endIndex);
- return returnValue;
-};
-
-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);
-
- returnValue += string.substr(endIndex);
- return returnValue;
-};
-
-var util$2 = {
- stringReplaceAll: stringReplaceAll$1,
- stringEncaseCRLFWithFirstIndex: stringEncaseCRLFWithFirstIndex$1
-};
-
-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 = new Map([
- ['n', '\n'],
- ['r', '\r'],
- ['t', '\t'],
- ['b', '\b'],
- ['f', '\f'],
- ['v', '\v'],
- ['0', '\0'],
- ['\\', '\\'],
- ['e', '\u001B'],
- ['a', '\u0007']
-]);
-
-function unescape(c) {
- const u = c[0] === 'u';
- const bracket = c[1] === '{';
-
- if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
- return String.fromCharCode(parseInt(c.slice(1), 16));
- }
-
- if (u && bracket) {
- return String.fromCodePoint(parseInt(c.slice(2, -1), 16));
- }
-
- return ESCAPES.get(c) || c;
-}
-
-function parseArguments(name, arguments_) {
- const results = [];
- const chunks = arguments_.trim().split(/\s*,\s*/g);
- let matches;
-
- 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}')`);
- }
- }
-
- return results;
-}
-
-function parseStyle(style) {
- STYLE_REGEX.lastIndex = 0;
-
- const results = [];
- let matches;
-
- while ((matches = STYLE_REGEX.exec(style)) !== null) {
- const name = matches[1];
-
- if (matches[2]) {
- const args = parseArguments(name, matches[2]);
- results.push([name].concat(args));
- } else {
- results.push([name]);
- }
- }
-
- return results;
-}
-
-function buildStyle(chalk, styles) {
- const enabled = {};
-
- 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;
- }
-
- if (!(styleName in current)) {
- throw new Error(`Unknown Chalk style: ${styleName}`);
- }
-
- current = styles.length > 0 ? current[styleName](...styles) : current[styleName];
- }
-
- return current;
-}
-
-var templates = (chalk, temporary) => {
- const styles = [];
- const chunks = [];
- let chunk = [];
-
- // 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');
- }
-
- chunks.push(buildStyle(chalk, styles)(chunk.join('')));
- chunk = [];
- styles.pop();
- } else {
- chunk.push(character);
- }
- });
-
- chunks.push(chunk.join(''));
-
- if (styles.length > 0) {
- const errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`;
- throw new Error(errMsg);
- }
-
- return chunks.join('');
-};
-
-const ansiStyles = ansiStyles$1.exports;
-const {stdout: stdoutColor, stderr: stderrColor} = supportsColor_1$1;
-const {
- stringReplaceAll,
- stringEncaseCRLFWithFirstIndex
-} = util$2;
-
-// `supportsColor.level` → `ansiStyles.color[name]` mapping
-const levelMapping = [
- 'ansi',
- 'ansi',
- 'ansi256',
- 'ansi16m'
-];
-
-const styles = Object.create(null);
-
-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');
- }
-
- // Detect level if not set manually
- const colorLevel = stdoutColor ? stdoutColor.level : 0;
- object.level = options.level === undefined ? colorLevel : options.level;
-};
-
-class ChalkClass {
- constructor(options) {
- return chalkFactory(options);
- }
-}
-
-const chalkFactory = options => {
- const chalk = {};
- applyOptions(chalk, options);
-
- chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);
-
- Object.setPrototypeOf(chalk, Chalk.prototype);
- Object.setPrototypeOf(chalk.template, chalk);
-
- chalk.template.constructor = () => {
- throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');
- };
-
- chalk.template.Instance = ChalkClass;
-
- return chalk.template;
-};
-
-function Chalk(options) {
- return chalkFactory(options);
-}
-
-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;
- }
- };
-}
-
-styles.visible = {
- get() {
- const builder = createBuilder(this, this._styler, true);
- Object.defineProperty(this, 'visible', {value: builder});
- return builder;
- }
-};
-
-const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];
-
-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);
- };
- }
- };
-}
-
-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);
- };
- }
- };
-}
-
-const proto$1 = Object.defineProperties(() => {}, {
- ...styles,
- level: {
- enumerable: true,
- get() {
- return this._generator.level;
- },
- set(level) {
- this._generator.level = level;
- }
- }
-});
-
-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;
- }
-
- return {
- open,
- close,
- openAll,
- closeAll,
- parent
- };
-};
-
-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(' '));
- };
-
- // `__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
-
- builder._generator = self;
- builder._styler = _styler;
- builder._isEmpty = _isEmpty;
-
- return builder;
-};
-
-const applyStyle = (self, string) => {
- if (self.level <= 0 || !string) {
- return self._isEmpty ? '' : string;
- }
-
- let styler = self._styler;
-
- 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);
-
- 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;
-};
-
-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])
- );
- }
-
- if (template === undefined) {
- template = templates;
- }
-
- return template(chalk, parts.join(''));
-};
-
-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;
-
-// For TypeScript
-chalk$1.Level = {
- None: 0,
- Basic: 1,
- Ansi256: 2,
- TrueColor: 3,
- 0: 'None',
- 1: 'Basic',
- 2: 'Ansi256',
- 3: 'TrueColor'
-};
-
-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}]`;
-
-/**
- * Posix glob regex
- */
-
-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
- */
-
-const WINDOWS_CHARS = {
- ...POSIX_CHARS,
-
- 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}]|$)`
-};
-
-/**
- * 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 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 */
-
- CHAR_LEFT_PARENTHESES: 40, /* ( */
- CHAR_RIGHT_PARENTHESES: 41, /* ) */
-
- CHAR_ASTERISK: 42, /* * */
-
- // 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 */
-
- SEP: path$3.sep,
-
- /**
- * Create EXTGLOB_CHARS
- */
-
- 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: ')' }
- };
- },
-
- /**
- * Create GLOB_CHARS
- */
-
- globChars(win32) {
- return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
- }
-};
-
-(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$5;
-
-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, '/');
-
-exports.removeBackslashes = str => {
- return str.replace(REGEX_REMOVE_BACKSLASH, match => {
- return match === '\\' ? '' : match;
- });
-};
-
-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 === '\\';
-};
-
-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)}`;
-};
-
-exports.removePrefix = (input, state = {}) => {
- let output = input;
- if (output.startsWith('./')) {
- output = output.slice(2);
- state.prefix = './';
- }
- 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}).*$)`;
- }
- 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;
-
-const isPathSeparator = code => {
- return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
-};
-
-const depth = token => {
- if (token.isPrefix !== true) {
- token.depth = token.isGlobstar ? Infinity : 1;
- }
-};
-
-/**
- * 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
- */
-
-const scan$1 = (input, options) => {
- const opts = options || {};
-
- const length = input.length - 1;
- const scanToEnd = opts.parts === true || opts.scanToEnd === true;
- const slashes = [];
- const tokens = [];
- const parts = [];
-
- 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 };
-
- const eos = () => index >= length;
- const peek = () => str.charCodeAt(index + 1);
- const advance = () => {
- prev = code;
- return str.charCodeAt(++index);
- };
-
- while (index < length) {
- code = advance();
- let next;
-
- if (code === CHAR_BACKWARD_SLASH) {
- backslashes = token.backslashes = true;
- code = advance();
-
- if (code === CHAR_LEFT_CURLY_BRACE$1) {
- braceEscaped = true;
- }
- continue;
- }
-
- 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;
- }
-
- if (code === CHAR_LEFT_CURLY_BRACE$1) {
- braces++;
- continue;
- }
-
- if (braceEscaped !== true && code === CHAR_DOT$1 && (code = advance()) === CHAR_DOT$1) {
- isBrace = token.isBrace = true;
- isGlob = token.isGlob = true;
- finished = true;
-
- if (scanToEnd === true) {
- continue;
- }
-
- break;
- }
-
- if (braceEscaped !== true && code === CHAR_COMMA$2) {
- isBrace = token.isBrace = true;
- isGlob = token.isGlob = true;
- finished = true;
-
- if (scanToEnd === true) {
- continue;
- }
-
- break;
- }
-
- if (code === CHAR_RIGHT_CURLY_BRACE$1) {
- braces--;
-
- if (braces === 0) {
- braceEscaped = false;
- isBrace = token.isBrace = true;
- finished = true;
- break;
- }
- }
- }
-
- if (scanToEnd === true) {
- continue;
- }
-
- break;
- }
-
- if (code === CHAR_FORWARD_SLASH) {
- slashes.push(index);
- tokens.push(token);
- token = { value: '', depth: 0, isGlob: false };
-
- if (finished === true) continue;
- if (prev === CHAR_DOT$1 && index === (start + 1)) {
- start += 2;
- continue;
- }
-
- lastIndex = index + 1;
- continue;
- }
-
- if (opts.noext !== true) {
- const isExtglobChar = code === CHAR_PLUS
- || code === CHAR_AT
- || code === CHAR_ASTERISK$1
- || code === CHAR_QUESTION_MARK
- || code === CHAR_EXCLAMATION_MARK;
-
- 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 (scanToEnd === true) {
- while (eos() !== true && (code = advance())) {
- if (code === CHAR_BACKWARD_SLASH) {
- backslashes = token.backslashes = true;
- code = advance();
- continue;
- }
-
- 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;
-
- if (scanToEnd === true) {
- continue;
- }
- break;
- }
-
- if (code === CHAR_QUESTION_MARK) {
- isGlob = token.isGlob = true;
- finished = true;
-
- if (scanToEnd === true) {
- continue;
- }
- break;
- }
-
- if (code === CHAR_LEFT_SQUARE_BRACKET$2) {
- while (eos() !== true && (next = advance())) {
- if (next === CHAR_BACKWARD_SLASH) {
- backslashes = token.backslashes = true;
- advance();
- continue;
- }
-
- if (next === CHAR_RIGHT_SQUARE_BRACKET$2) {
- isBracket = token.isBracket = true;
- isGlob = token.isGlob = true;
- finished = true;
- break;
- }
- }
-
- if (scanToEnd === true) {
- continue;
- }
-
- break;
- }
-
- if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
- negated = token.negated = true;
- start++;
- continue;
- }
-
- 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$1) {
- backslashes = token.backslashes = true;
- code = advance();
- continue;
- }
-
- if (code === CHAR_RIGHT_PARENTHESES$1) {
- finished = true;
- break;
- }
- }
- continue;
- }
- break;
- }
-
- if (isGlob === true) {
- finished = true;
-
- if (scanToEnd === true) {
- continue;
- }
-
- break;
- }
- }
-
- if (opts.noext === true) {
- isExtglob = false;
- isGlob = false;
- }
-
- let base = str;
- let prefix = '';
- let glob = '';
-
- if (start > 0) {
- prefix = str.slice(0, start);
- str = str.slice(start);
- lastIndex -= start;
- }
-
- 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 (base && base !== '' && base !== '/' && base !== str) {
- if (isPathSeparator(base.charCodeAt(base.length - 1))) {
- base = base.slice(0, -1);
- }
- }
-
- if (opts.unescape === true) {
- if (glob) glob = utils$6.removeBackslashes(glob);
-
- if (base && backslashes === true) {
- base = utils$6.removeBackslashes(base);
- }
- }
-
- const state = {
- prefix,
- input,
- start,
- base,
- glob,
- isBrace,
- isBracket,
- isGlob,
- isExtglob,
- isGlobstar,
- negated,
- negatedExtglob
- };
-
- if (opts.tokens === true) {
- state.maxDepth = 0;
- if (!isPathSeparator(code)) {
- tokens.push(token);
- }
- 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;
- }
-
- if (prevIndex && prevIndex + 1 < input.length) {
- const value = input.slice(prevIndex + 1);
- parts.push(value);
-
- 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;
- }
-
- return state;
-};
-
-var scan_1 = scan$1;
-
-const constants$4 = constants$5;
-const utils$5 = utils$7;
-
-/**
- * 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);
- }
-
- 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('..');
- }
-
- return value;
-};
-
-/**
- * Create the message for a syntax error
- */
-
-const syntaxError$1 = (type, char) => {
- return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
-};
-
-/**
- * Parse the given input string.
- * @param {String} input
- * @param {Object} options
- * @return {Object}
- */
-
-const parse$8 = (input, options) => {
- if (typeof input !== 'string') {
- throw new TypeError('Expected a string');
- }
-
- 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}`);
- }
-
- 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 globstar = opts => {
- return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
- };
-
- 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})`;
- }
-
- // minimatch options support
- if (typeof opts.noext === 'boolean') {
- opts.noextglob = opts.noext;
- }
-
- 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;
-
- while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
- advance();
- state.start++;
- count++;
- }
-
- if (count % 2 === 0) {
- return false;
- }
-
- 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;
- }
- }
-
- if (extglobs.length && tok.type !== 'paren') {
- extglobs[extglobs.length - 1].inner += tok.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;
- }
-
- tok.prev = prev;
- tokens.push(tok);
- prev = tok;
- };
-
- const extglobOpen = (type, value) => {
- const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
-
- 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}`;
- }
-
- if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) {
- output = token.close = `)${rest})${extglobStar})`;
- }
-
- if (token.prev.type === 'bos') {
- state.negatedExtglob = true;
- }
- }
-
- push({ type: 'paren', extglob: true, value, output });
- decrement('parens');
- };
-
- /**
- * Fast paths
- */
-
- if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
- let backslashes = false;
-
- let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
- if (first === '\\') {
- backslashes = true;
- return m;
- }
-
- 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 (output === input && opts.contains === true) {
- state.output = input;
- return state;
- }
-
- 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;
- }
-
- /**
- * Escaped characters
- */
-
- if (value === '\\') {
- const next = peek();
-
- if (next === '/' && opts.bash !== true) {
- continue;
- }
-
- if (next === '.' || next === ';') {
- continue;
- }
-
- if (!next) {
- value += '\\';
- push({ type: 'text', value });
- continue;
- }
-
- // collapse slashes to reduce potential for exploits
- const match = /^\\+/.exec(remaining());
- let slashes = 0;
-
- if (match && match[0].length > 2) {
- slashes = match[0].length;
- state.index += slashes;
- if (slashes % 2 !== 0) {
- value += '\\';
- }
- }
-
- if (opts.unescape === true) {
- value = advance();
- } else {
- value += advance();
- }
-
- if (state.brackets === 0) {
- push({ type: 'text', value });
- continue;
- }
- }
-
- /**
- * If we're inside a regex character class, continue
- * until we reach the closing bracket.
- */
-
- 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;
-
- 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();
-
- if (!bos.output && tokens.indexOf(prev) === 1) {
- bos.output = ONE_CHAR;
- }
- continue;
- }
- }
- }
- }
-
- if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
- value = `\\${value}`;
- }
-
- if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
- value = `\\${value}`;
- }
-
- if (opts.posix === true && value === '!' && prev.value === '[') {
- value = '^';
- }
-
- prev.value += value;
- append({ value });
- continue;
- }
-
- /**
- * If we're inside a quoted string, continue
- * until we reach the closing double quote.
- */
-
- if (state.quotes === 1 && value !== '"') {
- value = utils$5.escapeRegex(value);
- prev.value += value;
- append({ value });
- continue;
- }
-
- /**
- * Double quotes
- */
-
- if (value === '"') {
- state.quotes = state.quotes === 1 ? 0 : 1;
- if (opts.keepQuotes === true) {
- push({ type: 'text', value });
- }
- continue;
- }
-
- /**
- * Parentheses
- */
-
- if (value === '(') {
- increment('parens');
- push({ type: 'paren', value });
- continue;
- }
-
- if (value === ')') {
- if (state.parens === 0 && opts.strictBrackets === true) {
- throw new SyntaxError(syntaxError$1('opening', '('));
- }
-
- const extglob = extglobs[extglobs.length - 1];
- if (extglob && state.parens === extglob.parens + 1) {
- extglobClose(extglobs.pop());
- continue;
- }
-
- push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
- decrement('parens');
- continue;
- }
-
- /**
- * Square brackets
- */
-
- if (value === '[') {
- if (opts.nobracket === true || !remaining().includes(']')) {
- if (opts.nobracket !== true && opts.strictBrackets === true) {
- throw new SyntaxError(syntaxError$1('closing', ']'));
- }
-
- value = `\\${value}`;
- } else {
- increment('brackets');
- }
-
- push({ type: 'bracket', value });
- continue;
- }
-
- if (value === ']') {
- if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
- push({ type: 'text', value, output: `\\${value}` });
- continue;
- }
-
- if (state.brackets === 0) {
- if (opts.strictBrackets === true) {
- throw new SyntaxError(syntaxError$1('opening', '['));
- }
-
- push({ type: 'text', value, output: `\\${value}` });
- continue;
- }
-
- decrement('brackets');
-
- const prevValue = prev.value.slice(1);
- if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
- value = `/${value}`;
- }
-
- prev.value += value;
- append({ value });
-
- // when literal brackets are explicitly disabled
- // assume we should match with a regex character class
- if (opts.literalBrackets === false || utils$5.hasRegexChars(prevValue)) {
- continue;
- }
-
- const escaped = utils$5.escapeRegex(prev.value);
- state.output = state.output.slice(0, -prev.value.length);
-
- // 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;
- }
-
- // when the user specifies nothing, try to match both
- prev.value = `(${capture}${escaped}|${prev.value})`;
- state.output += prev.value;
- continue;
- }
-
- /**
- * Braces
- */
-
- if (value === '{' && opts.nobrace !== true) {
- increment('braces');
-
- const open = {
- type: 'brace',
- value,
- output: '(',
- outputIndex: state.output.length,
- tokensIndex: state.tokens.length
- };
-
- braces.push(open);
- push(open);
- continue;
- }
-
- if (value === '}') {
- const brace = braces[braces.length - 1];
-
- if (opts.nobrace === true || !brace) {
- push({ type: 'text', value, output: value });
- continue;
- }
-
- let output = ')';
-
- if (brace.dots === true) {
- const arr = tokens.slice();
- const range = [];
-
- 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);
- }
- }
-
- 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);
- }
- }
-
- push({ type: 'brace', value, output });
- decrement('braces');
- braces.pop();
- continue;
- }
-
- /**
- * Pipes
- */
-
- if (value === '|') {
- if (extglobs.length > 0) {
- extglobs[extglobs.length - 1].conditions++;
- }
- push({ type: 'text', value });
- continue;
- }
-
- /**
- * Commas
- */
-
- if (value === ',') {
- let output = value;
-
- const brace = braces[braces.length - 1];
- if (brace && stack[stack.length - 1] === 'braces') {
- brace.comma = true;
- output = '|';
- }
-
- push({ type: 'comma', value, output });
- continue;
- }
-
- /**
- * Slashes
- */
-
- 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;
- }
-
- push({ type: 'slash', value, output: SLASH_LITERAL });
- continue;
- }
-
- /**
- * Dots
- */
-
- 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.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
- push({ type: 'text', value, output: DOT_LITERAL });
- continue;
- }
-
- push({ type: 'dot', value, output: DOT_LITERAL });
- continue;
- }
-
- /**
- * Question marks
- */
-
- if (value === '?') {
- const isGroup = prev && prev.value === '(';
- if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
- extglobOpen('qmark', value);
- continue;
- }
-
- if (prev && prev.type === 'paren') {
- const next = peek();
- let output = value;
-
- if (next === '<' && !utils$5.supportsLookbehinds()) {
- throw new Error('Node.js v10 or higher is required for regex lookbehinds');
- }
-
- if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
- output = `\\${value}`;
- }
-
- push({ type: 'text', value, output });
- continue;
- }
-
- if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
- push({ type: 'qmark', value, output: QMARK_NO_DOT });
- continue;
- }
-
- push({ type: 'qmark', value, output: QMARK });
- continue;
- }
-
- /**
- * Exclamation
- */
-
- if (value === '!') {
- if (opts.noextglob !== true && peek() === '(') {
- if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
- extglobOpen('negate', value);
- continue;
- }
- }
-
- if (opts.nonegate !== true && state.index === 0) {
- negate();
- continue;
- }
- }
-
- /**
- * Plus
- */
-
- if (value === '+') {
- if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
- extglobOpen('plus', value);
- continue;
- }
-
- if ((prev && prev.value === '(') || opts.regex === false) {
- push({ type: 'plus', value, output: PLUS_LITERAL });
- continue;
- }
-
- if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
- push({ type: 'plus', value });
- continue;
- }
-
- push({ type: 'plus', value: PLUS_LITERAL });
- continue;
- }
-
- /**
- * Plain text
- */
-
- if (value === '@') {
- if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
- push({ type: 'at', extglob: true, value, output: '' });
- continue;
- }
-
- push({ type: 'text', value });
- continue;
- }
-
- /**
- * Plain text
- */
-
- if (value !== '*') {
- if (value === '$' || value === '^') {
- value = `\\${value}`;
- }
-
- const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
- if (match) {
- value += match[0];
- state.index += match[0].length;
- }
-
- push({ type: 'text', value });
- continue;
- }
-
- /**
- * Stars
- */
-
- 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;
- }
-
- let rest = remaining();
- if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
- extglobOpen('star', value);
- continue;
- }
-
- if (prev.type === 'star') {
- if (opts.noglobstar === true) {
- consume(value);
- continue;
- }
-
- 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 (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
- push({ type: 'star', value, output: '' });
- continue;
- }
-
- 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;
- }
-
- // strip consecutive `/**/`
- while (rest.slice(0, 3) === '/**') {
- const after = input[state.index + 4];
- if (after && after !== '/') {
- break;
- }
- rest = rest.slice(3);
- consume('/**', 3);
- }
-
- 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;
- }
-
- 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}`;
-
- 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 (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
- const end = rest[1] !== void 0 ? '|$' : '';
-
- state.output = state.output.slice(0, -(prior.output + prev.output).length);
- prior.output = `(?:${prior.output}`;
-
- prev.type = 'globstar';
- prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
- prev.value += value;
-
- state.output += prior.output + prev.output;
- state.globstar = true;
-
- consume(value + advance());
-
- push({ type: 'slash', value: '/', output: '' });
- continue;
- }
-
- 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;
- }
-
- // remove single star from output
- state.output = state.output.slice(0, -prev.output.length);
-
- // reset previous token to globstar
- prev.type = 'globstar';
- prev.output = globstar(opts);
- prev.value += value;
-
- // reset output with globstar
- state.output += prev.output;
- state.globstar = true;
- consume(value);
- continue;
- }
-
- const token = { type: 'star', value, output: star };
-
- if (opts.bash === true) {
- token.output = '.*?';
- if (prev.type === 'bos' || prev.type === 'slash') {
- token.output = nodot + token.output;
- }
- push(token);
- continue;
- }
-
- if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
- token.output = value;
- push(token);
- continue;
- }
-
- 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;
-
- } else if (opts.dot === true) {
- state.output += NO_DOTS_SLASH;
- prev.output += NO_DOTS_SLASH;
-
- } else {
- state.output += nodot;
- prev.output += nodot;
- }
-
- if (peek() !== '*') {
- state.output += ONE_CHAR;
- prev.output += ONE_CHAR;
- }
- }
-
- push(token);
- }
-
- while (state.brackets > 0) {
- 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$1('closing', ')'));
- state.output = utils$5.escapeLast(state.output, '(');
- decrement('parens');
- }
-
- while (state.braces > 0) {
- if (opts.strictBrackets === true) throw new SyntaxError(syntaxError$1('closing', '}'));
- state.output = utils$5.escapeLast(state.output, '{');
- decrement('braces');
- }
-
- if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
- push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
- }
-
- // 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;
-
- if (token.suffix) {
- state.output += token.suffix;
- }
- }
- }
-
- 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.
- */
-
-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);
-
- // 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;
-
- if (opts.capture) {
- star = `(${star})`;
- }
-
- const globstar = opts => {
- if (opts.noglobstar === true) return star;
- return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
- };
-
- const create = str => {
- switch (str) {
- case '*':
- return `${nodot}${ONE_CHAR}${star}`;
-
- case '.*':
- return `${DOT_LITERAL}${ONE_CHAR}${star}`;
-
- case '*.*':
- return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
-
- case '*/*':
- return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
-
- case '**':
- return nodot + globstar(opts);
-
- case '**/*':
- return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
-
- case '**/*.*':
- return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
-
- case '**/.*':
- return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
-
- default: {
- const match = /^(.*?)\.(\w+)$/.exec(str);
- if (!match) return;
-
- const source = create(match[1]);
- if (!source) return;
-
- return source + DOT_LITERAL + match[2];
- }
- }
- };
-
- const output = utils$5.removePrefix(input, state);
- let source = create(output);
-
- if (source && opts.strictSlashes !== true) {
- source += `${SLASH_LITERAL}?`;
- }
-
- return source;
-};
-
-var parse_1$3 = parse$8;
-
-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
- * 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;
- }
-
- 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$4.isWindows(options);
- const regex = isState
- ? picomatch$3.compileRe(glob, options)
- : picomatch$3.makeRe(glob, options, false, true);
-
- const state = regex.state;
- delete regex.state;
-
- let isIgnored = () => false;
- if (opts.ignore) {
- const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
- isIgnored = picomatch$3(opts.ignore, ignoreOpts, returnState);
- }
-
- 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 };
-
- if (typeof opts.onResult === 'function') {
- opts.onResult(result);
- }
-
- if (isMatch === false) {
- result.isMatch = false;
- return returnObject ? result : false;
- }
-
- if (isIgnored(input)) {
- if (typeof opts.onIgnore === 'function') {
- opts.onIgnore(result);
- }
- result.isMatch = false;
- return returnObject ? result : false;
- }
-
- if (typeof opts.onMatch === 'function') {
- opts.onMatch(result);
- }
- return returnObject ? result : true;
- };
-
- if (returnState) {
- matcher.state = state;
- }
-
- return matcher;
-};
-
-/**
- * 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
- */
-
-picomatch$3.test = (input, regex, options, { glob, posix } = {}) => {
- if (typeof input !== 'string') {
- throw new TypeError('Expected input to be a string');
- }
-
- if (input === '') {
- return { isMatch: false, output: '' };
- }
-
- const opts = options || {};
- const format = opts.format || (posix ? utils$4.toPosixSlashes : null);
- let match = input === glob;
- let output = (match && format) ? format(input) : input;
-
- if (match === false) {
- output = format ? format(input) : input;
- match = output === glob;
- }
-
- 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);
- }
- }
-
- 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
- */
-
-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));
-};
-
-/**
- * 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
- */
-
-picomatch$3.isMatch = (str, patterns, options) => picomatch$3(patterns, options)(str);
-
-/**
- * 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
- */
-
-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 });
-};
-
-/**
- * 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
- */
-
-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
- */
-
-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;
-};
-
-/**
- * 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
- */
-
-picomatch$3.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {
- if (!input || typeof input !== 'string') {
- throw new TypeError('Expected a non-empty string');
- }
-
- let parsed = { negated: false, fastpaths: true };
-
- if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
- parsed.output = parse$7.fastpaths(input, options);
- }
-
- if (!parsed.output) {
- parsed = parse$7(input, options);
- }
-
- return picomatch$3.compileRe(parsed, options, returnOutput, returnState);
-};
-
-/**
- * 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
- */
-
-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 /$^/;
- }
-};
-
-/**
- * Picomatch constants.
- * @return {Object}
- */
-
-picomatch$3.constants = constants$3;
-
-/**
- * Expose "picomatch"
- */
-
-var picomatch_1 = picomatch$3;
-
-var picomatch$2 = picomatch_1;
-
-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$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
- * @property {String} path
- * @property {String} fullPath
- * @property {fs.Stats=} stats
- * @property {fs.Dirent=} dirent
- * @property {String} basename
- */
-
-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];
-
-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;
- if (typeof filter === 'function') return filter;
-
- if (typeof filter === 'string') {
- const glob = picomatch$1(filter.trim());
- return entry => glob(entry.basename);
- }
-
- 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));
- }
- }
-
- 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));
- }
-};
-
-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
- };
- }
-
- constructor(options = {}) {
- super({
- objectMode: true,
- autoDestroy: true,
- highWaterMark: options.highWaterMark || 4096
- });
- const opts = { ...ReaddirpStream.defaultOptions, ...options };
- const { root, type } = opts;
-
- this._fileFilter = normalizeFilter(opts.fileFilter);
- this._directoryFilter = normalizeFilter(opts.directoryFilter);
-
- 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;
- }
-
- 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 };
-
- // Launch stream with one parent, the root dir.
- this.parents = [this._exploreDir(root, 1)];
- this.reading = false;
- this.parent = undefined;
- }
-
- async _read(batch) {
- if (this.reading) return;
- this.reading = true;
-
- try {
- while (!this.destroyed && batch > 0) {
- const { path, depth, files = [] } = this.parent || {};
-
- 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;
-
- 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 (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;
- }
- }
-
- async _exploreDir(path, depth) {
- let files;
- try {
- files = await readdir$1(path, this._rdOptions);
- } catch (error) {
- this._onError(error);
- }
- return { files, depth, path };
- }
-
- 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;
- }
-
- _onError(err) {
- if (isNormalFlowError(err) && !this.destroyed) {
- this.emit('warn', err);
- } else {
- this.destroy(err);
- }
- }
-
- 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);
- }
- }
- }
-
- _includeAsFile(entry) {
- const stats = entry && entry[this._statsProp];
-
- return stats && this._wantsEverything && !stats.isDirectory();
- }
-}
-
-/**
- * @typedef {Object} ReaddirpArguments
- * @property {Function=} fileFilter
- * @property {Function=} directoryFilter
- * @property {String=} type
- * @property {Number=} depth
- * @property {String=} root
- * @property {Boolean=} lstat
- * @property {Boolean=} bigint
- */
-
-/**
- * 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(', ')}`);
- }
-
- options.root = root;
- return new ReaddirpStream(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));
- });
-};
-
-readdirp$1.promise = readdirpPromise;
-readdirp$1.ReaddirpStream = ReaddirpStream;
-readdirp$1.default = readdirp$1;
-
-var readdirp_1 = readdirp$1;
-
-var anymatch$2 = {exports: {}};
-
-/*!
- * normalize-path <https://github.com/jonschlinkert/normalize-path>
- *
- * Copyright (c) 2014-2018, Jon Schlinkert.
- * Released under the MIT License.
- */
-
-var normalizePath$2 = function(path, stripTrailing) {
- if (typeof path !== 'string') {
- throw new TypeError('expected path to be a string');
- }
-
- if (path === '\\' || path === '/') return '/';
-
- var len = path.length;
- if (len <= 1) return path;
-
- // 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('/');
-};
-
-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
- * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher
- */
-const BANG$1 = '!';
-const DEFAULT_OPTIONS = {returnIndex: false};
-const arrify$1 = (item) => Array.isArray(item) ? item : [item];
-
-/**
- * @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<Function>} patterns
- * @param {Array<Function>} 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);
-
- for (let index = 0; index < negPatterns.length; index++) {
- const nglob = negPatterns[index];
- if (nglob(path)) {
- return returnIndex ? -1 : 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 returnIndex ? -1 : false;
-};
-
-/**
- * @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;
-
- // 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));
-
- if (testString == null) {
- return (testString, ri = false) => {
- const returnIndex = typeof ri === 'boolean' ? ri : false;
- return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
- }
- }
-
- return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
-};
-
-anymatch$1.default = anymatch$1;
-anymatch$2.exports = anymatch$1;
-
-/*!
- * is-extglob <https://github.com/jonschlinkert/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;
- }
-
- var match;
- while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
- if (match[2]) return true;
- str = str.slice(match.index + match[0].length);
- }
-
- return false;
-};
-
-/*!
- * is-glob <https://github.com/jonschlinkert/is-glob>
- *
- * Copyright (c) 2014-2017, Jon Schlinkert.
- * Released under the MIT License.
- */
-
-var isExtglob = isExtglob$1;
-var chars = { '{': '}', '(': ')', '[': ']'};
-var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
-var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
-
-var isGlob$2 = function isGlob(str, options) {
- if (typeof str !== 'string' || str === '') {
- return false;
- }
-
- if (isExtglob(str)) {
- return true;
- }
-
- var regex = strictRegex;
- var match;
-
- // optionally relax regex
- if (options && options.strict === false) {
- regex = relaxedRegex;
- }
-
- while ((match = regex.exec(str))) {
- if (match[2]) return true;
- var idx = match.index + match[0].length;
-
- // 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;
- }
- }
-
- str = str.slice(idx);
- }
- return false;
-};
-
-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;
-var enclosure = /[\{\[].*[\}\]]$/;
-var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/;
-var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
-
-/**
- * @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);
-
- // flip windows path separators
- if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {
- str = str.replace(backslash, slash);
- }
-
- // special case for strings ending in enclosure containing path separator
- if (enclosure.test(str)) {
- str += slash;
- }
-
- // 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');
-};
-
-var utils$3 = {};
-
-(function (exports) {
-
-exports.isInteger = num => {
- if (typeof num === 'number') {
- return Number.isInteger(num);
- }
- if (typeof num === 'string' && num.trim() !== '') {
- return Number.isInteger(Number(num));
- }
- return false;
-};
-
-/**
- * Find a node of the given type
- */
-
-exports.find = (node, type) => node.nodes.find(node => node.type === type);
-
-/**
- * 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;
-};
-
-/**
- * Escape the given node with '\\' before node.value
- */
-
-exports.escapeNode = (block, n = 0, type) => {
- let node = block.nodes[n];
- if (!node) return;
-
- if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
- if (node.escaped !== true) {
- node.value = '\\' + node.value;
- node.escaped = true;
- }
- }
-};
-
-/**
- * Returns true if the given brace node should be enclosed in literal braces
- */
-
-exports.encloseBrace = node => {
- if (node.type !== 'brace') return false;
- if ((node.commas >> 0 + node.ranges >> 0) === 0) {
- node.invalid = true;
- return true;
- }
- return false;
-};
-
-/**
- * Returns true if a brace node is invalid.
- */
-
-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;
-};
-
-/**
- * Returns true if a node is an open or close node
- */
-
-exports.isOpenOrClose = node => {
- if (node.type === 'open' || node.type === 'close') {
- return true;
- }
- return node.open === true || node.close === true;
-};
-
-/**
- * Reduce an array of text nodes.
- */
-
-exports.reduce = nodes => nodes.reduce((acc, node) => {
- if (node.type === 'text') acc.push(node.value);
- if (node.type === 'range') node.type = 'text';
- return acc;
-}, []);
-
-/**
- * Flatten an array
- */
-
-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));
-
-const utils$2 = utils$3;
-
-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 = '';
-
- if (node.value) {
- if ((invalidBlock || invalidNode) && utils$2.isOpenOrClose(node)) {
- return '\\' + node.value;
- }
- return node.value;
- }
-
- if (node.value) {
- return node.value;
- }
-
- if (node.nodes) {
- for (let child of node.nodes) {
- output += stringify(child);
- }
- }
- return output;
- };
-
- return stringify(ast);
-};
-
-/*!
- * is-number <https://github.com/jonschlinkert/is-number>
- *
- * Copyright (c) 2014-present, Jon Schlinkert.
- * Released under the MIT License.
- */
-
-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;
-};
-
-/*!
- * to-regex-range <https://github.com/micromatch/to-regex-range>
- *
- * Copyright (c) 2015-present, Jon Schlinkert.
- * Released under the MIT License.
- */
-
-const isNumber$2 = isNumber$3;
-
-const toRegexRange$1 = (min, max, options) => {
- if (isNumber$2(min) === false) {
- throw new TypeError('toRegexRange: expected the first argument to be a number');
- }
-
- if (max === void 0 || min === max) {
- return String(min);
- }
-
- if (isNumber$2(max) === false) {
- throw new TypeError('toRegexRange: expected the second argument to be a number.');
- }
-
- let opts = { relaxZeros: true, ...options };
- if (typeof opts.strictZeros === 'boolean') {
- opts.relaxZeros = opts.strictZeros === false;
- }
-
- 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;
-
- if (toRegexRange$1.cache.hasOwnProperty(cacheKey)) {
- return toRegexRange$1.cache[cacheKey].result;
- }
-
- let a = Math.min(min, max);
- let b = Math.max(min, max);
-
- if (Math.abs(a - b) === 1) {
- let result = min + '|' + max;
- if (opts.capture) {
- return `(${result})`;
- }
- if (opts.wrap === false) {
- return result;
- }
- return `(?:${result})`;
- }
-
- let isPadded = hasPadding(min) || hasPadding(max);
- let state = { min, max, a, b };
- let positives = [];
- let negatives = [];
-
- if (isPadded) {
- state.isPadded = isPadded;
- state.maxLen = String(state.max).length;
- }
-
- 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);
- }
-
- state.negatives = negatives;
- state.positives = positives;
- state.result = collatePatterns(negatives, positives);
-
- if (opts.capture === true) {
- state.result = `(${state.result})`;
- } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
- state.result = `(?:${state.result})`;
- }
-
- toRegexRange$1.cache[cacheKey] = state;
- return state.result;
-};
-
-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('|');
-}
-
-function splitToRanges(min, max) {
- let nines = 1;
- let zeros = 1;
-
- let stop = countNines(min, nines);
- let stops = new Set([max]);
-
- while (min <= stop && stop <= max) {
- stops.add(stop);
- nines += 1;
- stop = countNines(min, nines);
- }
-
- stop = countZeros(max + 1, zeros) - 1;
-
- while (min < stop && stop <= max) {
- stops.add(stop);
- zeros += 1;
- stop = countZeros(max + 1, zeros) - 1;
- }
-
- stops = [...stops];
- stops.sort(compare$2);
- return stops;
-}
-
-/**
- * Convert a range to a regex pattern
- * @param {Number} `start`
- * @param {Number} `stop`
- * @return {String}
- */
-
-function rangeToPattern(start, stop, options) {
- if (start === stop) {
- return { pattern: start, count: [], digits: 0 };
- }
-
- let zipped = zip(start, stop);
- let digits = zipped.length;
- let pattern = '';
- let count = 0;
-
- for (let i = 0; i < digits; i++) {
- let [startDigit, stopDigit] = zipped[i];
-
- if (startDigit === stopDigit) {
- pattern += startDigit;
-
- } else if (startDigit !== '0' || stopDigit !== '9') {
- pattern += toCharacterClass(startDigit, stopDigit);
-
- } else {
- count++;
- }
- }
-
- if (count) {
- pattern += options.shorthand === true ? '\\d' : '[0-9]';
- }
-
- return { pattern, count: [count], digits };
-}
-
-function splitToPatterns(min, max, tok, options) {
- let ranges = splitToRanges(min, max);
- let tokens = [];
- let start = min;
- let prev;
-
- for (let i = 0; i < ranges.length; i++) {
- let max = ranges[i];
- let obj = rangeToPattern(String(start), String(max), options);
- let zeros = '';
-
- if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
- if (prev.count.length > 1) {
- prev.count.pop();
- }
-
- prev.count.push(obj.count[0]);
- prev.string = prev.pattern + toQuantifier(prev.count);
- start = max + 1;
- continue;
- }
-
- if (tok.isPadded) {
- zeros = padZeros(max, tok, options);
- }
-
- obj.string = zeros + obj.pattern + toQuantifier(obj.count);
- tokens.push(obj);
- start = max + 1;
- prev = obj;
- }
-
- return tokens;
-}
-
-function filterPatterns(arr, comparison, prefix, intersection, options) {
- let result = [];
-
- for (let ele of arr) {
- let { string } = ele;
-
- // only push if _both_ are negative...
- if (!intersection && !contains(comparison, 'string', string)) {
- result.push(prefix + string);
- }
-
- // or _both_ are positive
- if (intersection && contains(comparison, 'string', string)) {
- result.push(prefix + string);
- }
- }
- return result;
-}
-
-/**
- * Zip strings
- */
-
-function zip(a, b) {
- let arr = [];
- for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
- return arr;
-}
-
-function compare$2(a, b) {
- return a > b ? 1 : b > a ? -1 : 0;
-}
-
-function contains(arr, key, val) {
- return arr.some(ele => ele[key] === val);
-}
-
-function countNines(min, len) {
- return Number(String(min).slice(0, -len) + '9'.repeat(len));
-}
-
-function countZeros(integer, zeros) {
- return integer - (integer % Math.pow(10, zeros));
-}
-
-function toQuantifier(digits) {
- let [start = 0, stop = ''] = digits;
- if (stop || start > 1) {
- return `{${start + (stop ? ',' + stop : '')}}`;
- }
- return '';
-}
-
-function toCharacterClass(a, b, options) {
- return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
-}
-
-function hasPadding(str) {
- return /^-?(0+)\d/.test(str);
-}
-
-function padZeros(value, tok, options) {
- if (!tok.isPadded) {
- return value;
- }
-
- let diff = Math.abs(tok.maxLen - String(value).length);
- let relax = options.relaxZeros !== false;
-
- 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}}`;
- }
- }
-}
-
-/**
- * Cache
- */
-
-toRegexRange$1.cache = {};
-toRegexRange$1.clearCache = () => (toRegexRange$1.cache = {});
-
-/**
- * Expose `toRegexRange`
- */
-
-var toRegexRange_1 = toRegexRange$1;
-
-/*!
- * fill-range <https://github.com/jonschlinkert/fill-range>
- *
- * Copyright (c) 2014-present, Jon Schlinkert.
- * 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 = toNumber => {
- return value => toNumber === true ? Number(value) : String(value);
-};
-
-const isValidValue = value => {
- return typeof value === 'number' || (typeof value === 'string' && value !== '');
-};
-
-const isNumber$1 = num => Number.isInteger(+num);
-
-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;
-};
-
-const stringify$7 = (start, end, options) => {
- if (typeof start === 'string' || typeof end === 'string') {
- return true;
- }
- 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;
-};
-
-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;
-};
-
-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);
-
- let prefix = options.capture ? '' : '?:';
- let positives = '';
- let negatives = '';
- let result;
-
- if (parts.positives.length) {
- positives = parts.positives.join('|');
- }
-
- if (parts.negatives.length) {
- negatives = `-(${prefix}${parts.negatives.join('|')})`;
- }
-
- if (positives && negatives) {
- result = `${positives}|${negatives}`;
- } else {
- result = positives || negatives;
- }
-
- if (options.wrap) {
- return `(${prefix}${result})`;
- }
-
- return result;
-};
-
-const toRange = (a, b, isNumbers, options) => {
- if (isNumbers) {
- return toRegexRange(a, b, { wrap: false, ...options });
- }
-
- let start = String.fromCharCode(a);
- if (a === b) return start;
-
- let stop = String.fromCharCode(b);
- return `[${start}-${stop}]`;
-};
-
-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);
-};
-
-const rangeError = (...args) => {
- return new RangeError('Invalid range arguments: ' + util$1.inspect(...args));
-};
-
-const invalidRange = (start, end, options) => {
- if (options.strictRanges === true) throw rangeError([start, end]);
- return [];
-};
-
-const invalidStep = (step, options) => {
- if (options.strictRanges === true) {
- throw new TypeError(`Expected step "${step}" to be a number`);
- }
- return [];
-};
-
-const fillNumbers = (start, end, step = 1, options = {}) => {
- let a = Number(start);
- let b = Number(end);
-
- if (!Number.isInteger(a) || !Number.isInteger(b)) {
- if (options.strictRanges === true) throw rangeError([start, end]);
- return [];
- }
-
- // fix negative zero
- if (a === 0) a = 0;
- if (b === 0) b = 0;
-
- let descending = a > b;
- let startString = String(start);
- let endString = String(end);
- let stepString = String(step);
- step = Math.max(Math.abs(step), 1);
-
- 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);
-
- if (options.toRegex && step === 1) {
- return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
- }
-
- let parts = { negatives: [], positives: [] };
- let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
- let range = [];
- let index = 0;
-
- 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++;
- }
-
- if (options.toRegex === true) {
- return step > 1
- ? toSequence(parts, options)
- : toRegex(range, null, { wrap: false, ...options });
- }
-
- return range;
-};
-
-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);
- }
-
-
- 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);
-
- if (options.toRegex && step === 1) {
- return toRange(min, max, false, options);
- }
-
- let range = [];
- let index = 0;
-
- while (descending ? a >= b : a <= b) {
- range.push(format(a, index));
- a = descending ? a - step : a + step;
- index++;
- }
-
- if (options.toRegex === true) {
- return toRegex(range, null, { wrap: false, options });
- }
-
- return range;
-};
-
-const fill$2 = (start, end, step, options = {}) => {
- if (end == null && isValidValue(start)) {
- return [start];
- }
-
- if (!isValidValue(start) || !isValidValue(end)) {
- return invalidRange(start, end, options);
- }
-
- if (typeof step === 'function') {
- return fill$2(start, end, 1, { transform: step });
- }
-
- if (isObject$2(step)) {
- return fill$2(start, end, 0, step);
- }
-
- let opts = { ...options };
- if (opts.capture === true) opts.wrap = true;
- step = step || opts.step || 1;
-
- if (!isNumber$1(step)) {
- if (step != null && !isObject$2(step)) return invalidStep(step, opts);
- return fill$2(start, end, 1, step);
- }
-
- if (isNumber$1(start) && isNumber$1(end)) {
- return fillNumbers(start, end, step, opts);
- }
-
- return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
-};
-
-var fillRange = fill$2;
-
-const fill$1 = fillRange;
-const utils$1 = utils$3;
-
-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 = '';
-
- if (node.isOpen === true) {
- return prefix + node.value;
- }
- if (node.isClose === true) {
- return prefix + node.value;
- }
-
- if (node.type === 'open') {
- return invalid ? (prefix + node.value) : '(';
- }
-
- if (node.type === 'close') {
- return invalid ? (prefix + node.value) : ')';
- }
-
- if (node.type === 'comma') {
- return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
- }
-
- if (node.value) {
- return node.value;
- }
-
- if (node.nodes && node.ranges > 0) {
- let args = utils$1.reduce(node.nodes);
- let range = fill$1(...args, { ...options, wrap: false, toRegex: true });
-
- if (range.length !== 0) {
- return args.length > 1 && range.length > 1 ? `(${range})` : range;
- }
- }
-
- if (node.nodes) {
- for (let child of node.nodes) {
- output += walk(child, node);
- }
- }
- return output;
- };
-
- return walk(ast);
-};
-
-var compile_1 = compile$1;
-
-const fill = fillRange;
-const stringify$6 = stringify$8;
-const utils = utils$3;
-
-const append = (queue = '', stash = '', enclose = false) => {
- let result = [];
-
- queue = [].concat(queue);
- stash = [].concat(stash);
-
- 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);
-};
-
-const expand$1 = (ast, options = {}) => {
- let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
-
- let walk = (node, parent = {}) => {
- node.queue = [];
-
- let p = parent;
- let q = parent.queue;
-
- while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
- p = p.parent;
- q = p.queue;
- }
-
- if (node.invalid || node.dollar) {
- q.push(append(q.pop(), stringify$6(node, options)));
- return;
- }
-
- if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
- q.push(append(q.pop(), ['{}']));
- return;
- }
-
- if (node.nodes && node.ranges > 0) {
- let args = utils.reduce(node.nodes);
-
- 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 = fill(...args, options);
- if (range.length === 0) {
- range = stringify$6(node, options);
- }
-
- q.push(append(q.pop(), range));
- node.nodes = [];
- return;
- }
-
- let enclose = utils.encloseBrace(node);
- let queue = node.queue;
- let block = node;
-
- while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
- block = block.parent;
- queue = block.queue;
- }
-
- for (let i = 0; i < node.nodes.length; i++) {
- let child = node.nodes[i];
-
- if (child.type === 'comma' && node.type === 'brace') {
- if (i === 1) queue.push('');
- queue.push('');
- continue;
- }
-
- if (child.type === 'close') {
- q.push(append(q.pop(), queue, enclose));
- continue;
- }
-
- if (child.value && child.type !== 'open') {
- queue.push(append(queue.pop(), child.value));
- continue;
- }
-
- if (child.nodes) {
- walk(child, node);
- }
- }
-
- return queue;
- };
-
- return utils.flatten(walk(ast));
-};
-
-var expand_1 = expand$1;
-
-var constants$2 = {
- MAX_LENGTH: 1024 * 64,
-
- // Digits
- CHAR_0: '0', /* 0 */
- CHAR_9: '9', /* 9 */
-
- // Alphabet chars.
- CHAR_UPPERCASE_A: 'A', /* A */
- CHAR_LOWERCASE_A: 'a', /* a */
- CHAR_UPPERCASE_Z: 'Z', /* Z */
- CHAR_LOWERCASE_Z: 'z', /* z */
-
- CHAR_LEFT_PARENTHESES: '(', /* ( */
- CHAR_RIGHT_PARENTHESES: ')', /* ) */
-
- 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 */
-};
-
-const stringify$5 = stringify$8;
-
-/**
- * Constants
- */
-
-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;
-
-/**
- * parse
- */
-
-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$3, opts.maxLength) : MAX_LENGTH$3;
- if (input.length > max) {
- throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
- }
-
- 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;
-
- /**
- * Helpers
- */
-
- const advance = () => input[index++];
- const push = node => {
- if (node.type === 'text' && prev.type === 'dot') {
- prev.type = 'text';
- }
-
- if (prev && prev.type === 'text' && node.type === 'text') {
- prev.value += node.value;
- return;
- }
-
- block.nodes.push(node);
- node.parent = block;
- node.prev = prev;
- prev = node;
- return node;
- };
-
- push({ type: 'bos' });
-
- while (index < length) {
- block = stack[stack.length - 1];
- value = advance();
-
- /**
- * Invalid chars
- */
-
- if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
- continue;
- }
-
- /**
- * Escaped chars
- */
-
- if (value === CHAR_BACKSLASH) {
- push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
- continue;
- }
-
- /**
- * Right square bracket (literal): ']'
- */
-
- if (value === CHAR_RIGHT_SQUARE_BRACKET$1) {
- push({ type: 'text', value: '\\' + value });
- continue;
- }
-
- /**
- * Left square bracket: '['
- */
-
- if (value === CHAR_LEFT_SQUARE_BRACKET$1) {
- brackets++;
- let next;
-
- while (index < length && (next = advance())) {
- value += next;
-
- if (next === CHAR_LEFT_SQUARE_BRACKET$1) {
- brackets++;
- continue;
- }
-
- if (next === CHAR_BACKSLASH) {
- value += advance();
- continue;
- }
-
- if (next === CHAR_RIGHT_SQUARE_BRACKET$1) {
- brackets--;
-
- if (brackets === 0) {
- break;
- }
- }
- }
-
- push({ type: 'text', value });
- continue;
- }
-
- /**
- * Parentheses
- */
-
- if (value === CHAR_LEFT_PARENTHESES) {
- block = push({ type: 'paren', nodes: [] });
- stack.push(block);
- push({ type: 'text', value });
- continue;
- }
-
- 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;
- }
-
- /**
- * Quotes: '|"|`
- */
-
- if (value === CHAR_DOUBLE_QUOTE$1 || value === CHAR_SINGLE_QUOTE$1 || value === CHAR_BACKTICK) {
- let open = value;
- let next;
-
- if (options.keepQuotes !== true) {
- value = '';
- }
-
- while (index < length && (next = advance())) {
- if (next === CHAR_BACKSLASH) {
- value += next + advance();
- continue;
- }
-
- if (next === open) {
- if (options.keepQuotes === true) value += next;
- break;
- }
-
- value += next;
- }
-
- push({ type: 'text', value });
- continue;
- }
-
- /**
- * Left curly brace: '{'
- */
-
- if (value === CHAR_LEFT_CURLY_BRACE) {
- depth++;
-
- 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: []
- };
-
- block = push(brace);
- stack.push(block);
- push({ type: 'open', value });
- continue;
- }
-
- /**
- * Right curly brace: '}'
- */
-
- if (value === CHAR_RIGHT_CURLY_BRACE) {
- if (block.type !== 'brace') {
- push({ type: 'text', value });
- continue;
- }
-
- let type = 'close';
- block = stack.pop();
- block.close = true;
-
- push({ type, value });
- depth--;
-
- block = stack[stack.length - 1];
- continue;
- }
-
- /**
- * Comma: ','
- */
-
- 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) }];
- }
-
- push({ type: 'comma', value });
- block.commas++;
- continue;
- }
-
- /**
- * Dot: '.'
- */
-
- if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
- let siblings = block.nodes;
-
- if (depth === 0 || siblings.length === 0) {
- push({ type: 'text', value });
- continue;
- }
-
- if (prev.type === 'dot') {
- block.range = [];
- prev.value += value;
- prev.type = 'range';
-
- if (block.nodes.length !== 3 && block.nodes.length !== 5) {
- block.invalid = true;
- block.ranges = 0;
- prev.type = 'text';
- continue;
- }
-
- block.ranges++;
- block.args = [];
- continue;
- }
-
- if (prev.type === 'range') {
- siblings.pop();
-
- let before = siblings[siblings.length - 1];
- before.value += prev.value + value;
- prev = before;
- block.ranges--;
- continue;
- }
-
- push({ type: 'dot', value });
- continue;
- }
-
- /**
- * Text
- */
-
- push({ type: 'text', value });
- }
-
- // 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;
- }
- });
-
- // 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);
-
- push({ type: 'eos' });
- return ast;
-};
-
-var parse_1$2 = parse$6;
-
-const stringify$4 = stringify$8;
-const compile = compile_1;
-const expand = expand_1;
-const parse$5 = parse_1$2;
-
-/**
- * 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
- */
-
-const braces$1 = (input, options = {}) => {
- let output = [];
-
- 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));
- }
-
- if (options && options.expand === true && options.nodupes === true) {
- output = [...new Set(output)];
- }
- return output;
-};
-
-/**
- * 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
- */
-
-braces$1.parse = (input, options = {}) => parse$5(input, options);
-
-/**
- * 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
- */
-
-braces$1.stringify = (input, options = {}) => {
- if (typeof input === 'string') {
- return stringify$4(braces$1.parse(input, options), options);
- }
- return stringify$4(input, options);
-};
-
-/**
- * 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
- */
-
-braces$1.compile = (input, options = {}) => {
- if (typeof input === 'string') {
- input = braces$1.parse(input, options);
- }
- return compile(input, options);
-};
-
-/**
- * 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
- */
-
-braces$1.expand = (input, options = {}) => {
- if (typeof input === 'string') {
- input = braces$1.parse(input, options);
- }
-
- let result = expand(input, options);
-
- // filter out empty strings if specified
- if (options.noempty === true) {
- result = result.filter(Boolean);
- }
-
- // filter out duplicates if specified
- if (options.nodupes === true) {
- result = [...new Set(result)];
- }
-
- return result;
-};
-
-/**
- * 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
- */
-
-braces$1.create = (input, options = {}) => {
- if (input === '' || input.length < 3) {
- return [input];
- }
-
- return options.expand !== true
- ? braces$1.compile(input, options)
- : braces$1.expand(input, options);
-};
-
-/**
- * Expose "braces"
- */
-
-var braces_1 = braces$1;
-
-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"
-];
-
-var binaryExtensions$1 = require$$0$4;
-
-const path$1 = require$$0__default$2['default'];
-const binaryExtensions = binaryExtensions$1;
-
-const extensions$1 = new Set(binaryExtensions);
-
-var isBinaryPath$1 = filePath => extensions$1.has(path$1.extname(filePath).slice(1).toLowerCase());
-
-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';
-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';
-
-exports.STR_DATA = 'data';
-exports.STR_END = 'end';
-exports.STR_CLOSE = 'close';
-
-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';
-
-exports.KEY_LISTENERS = 'listeners';
-exports.KEY_ERR = 'errHandlers';
-exports.KEY_RAW = 'rawEmitters';
-exports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];
-
-exports.DOT_SLASH = `.${sep}`;
-
-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 = /^\.[/\\]/;
-
-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;
-
-exports.isWindows = platform === 'win32';
-exports.isMacos = platform === 'darwin';
-exports.isLinux = platform === 'linux';
-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_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;
-
-const THROTTLE_MODE_WATCH = 'watch';
-
-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$1 = { lstat: lstat$1, stat: stat$2 };
-
-// TODO: emit errors properly. Example: EMFILE on Macos.
-const foreach = (val, fn) => {
- if (val instanceof Set) {
- val.forEach(fn);
- } else {
- fn(val);
- }
-};
-
-const addAndConvert = (main, prop, item) => {
- let container = main[prop];
- if (!(container instanceof Set)) {
- main[prop] = container = new Set([container]);
- }
- container.add(item);
-};
-
-const clearItem = cont => key => {
- const set = cont[key];
- if (set instanceof Set) {
- set.clear();
- } else {
- delete cont[key];
- }
-};
-
-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;
-
-/**
- * @typedef {String} Path
- */
-
-// fs_watch helpers
-
-// object to hold per-process fs_watch instances
-// (may be shared across chokidar FSWatcher instances)
-
-/**
- * @typedef {Object} FsWatchContainer
- * @property {Set} listeners
- * @property {Set} errHandlers
- * @property {Set} rawEmitters
- * @property {fs.FSWatcher=} watcher
- * @property {Boolean=} watcherUnusable
- */
-
-/**
- * @type {Map<String,FsWatchContainer>}
- */
-const FsWatchInstances = new Map();
-
-/**
- * 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});
-
- // 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);
- }
-}
-
-/**
- * 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);
- });
-};
-
-/**
- * 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);
-
- /** @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$1 && 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);
-
- // 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);
- }
- };
-};
-
-// 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);
-
- const copts = cont && cont.options;
- if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {
- fs$2.unwatchFile(fullPath);
- cont = undefined;
- }
-
- /* eslint-enable no-unused-vars, prefer-destructuring */
-
- 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);
- }
- // 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);
- }
- };
-};
-
-/**
- * @mixin
- */
-class NodeFsHandler$1 {
-
-/**
- * @param {import("../index").FSWatcher} fsW
- */
-constructor(fsW) {
- this.fsw = fsW;
- this._boundHandleError = (error) => fsW._handleError(error);
-}
-
-/**
- * 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;
-
- 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;
-}
-
-/**
- * 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;
-
- 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);
-
- // 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;
-}
-
-/**
- * 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<Boolean>} 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.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;
- }
-
- // don't follow the same symlink more than once
- if (this.fsw._symlinkPaths.has(full)) {
- return true;
- }
-
- 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);
-
- if (!wh.hasGlob) {
- throttler = this.fsw._throttle('readdir', directory, 1000);
- if (!throttler) return;
- }
-
- const previous = this.fsw._getWatchedDir(wh.path);
- const current = new Set();
-
- 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 (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {
- 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();
-
- // ensure relativeness of path is preserved in case of watcher reuse
- path = sysPath$2.join(dir, sysPath$2.relative(dir, path));
-
- this._addToNodeFs(path, initialAdd, wh, depth + 1);
- }
- }).on(EV_ERROR$2, this._boundHandleError);
-
- return new Promise(resolve =>
- stream.once(STR_END$2, () => {
- if (this.fsw.closed) {
- stream = undefined;
- return;
- }
- const wasThrottled = throttler ? throttler.clear() : false;
-
- resolve();
-
- // 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);
- });
-
- stream = undefined;
-
- // one more time for any missed in case changes came in extremely quickly
- if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);
- })
- );
-}
-
-/**
- * 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<Function>} 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);
- }
-
- // ensure dir is tracked (harmless if redundant)
- parentDir.add(sysPath$2.basename(dir));
- this.fsw._getWatchedDir(dir);
- let throttler;
- let closer;
-
- 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;
- }
-
- closer = this._watchWithNodeFs(dir, (dirPath, stats) => {
- // if current directory is removed, do nothing
- if (stats && stats.mtimeMs === 0) return;
-
- this._handleRead(dirPath, false, wh, target, dir, depth, throttler);
- });
- }
- 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;
- }
-
- 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);
- }
-
- // 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;
- }
-
- 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;
-
- // 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();
-
- this.fsw._addPathCloser(path, closer);
- return false;
-
- } catch (error) {
- if (this.fsw._handleError(error)) {
- ready();
- return path;
- }
- }
-}
-
-}
-
-var nodefsHandler = NodeFsHandler$1;
-
-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 {
- fsevents = undefined;
-} catch (error) {
- if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);
-}
-
-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 {
- 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,
-
- ROOT_GLOBSTAR,
- DIR_SUFFIX,
- DOT_SLASH,
- FUNCTION_TYPE: FUNCTION_TYPE$1,
- EMPTY_FN: EMPTY_FN$1,
- IDENTITY_FN
-} = constants$1;
-
-const Depth = (value) => isNaN(value) ? {} : {depth: value};
-
-const stat$1 = promisify$1(fs$1.stat);
-const lstat = promisify$1(fs$1.lstat);
-const realpath = promisify$1(fs$1.realpath);
-
-const statMethods = { stat: stat$1, lstat };
-
-/**
- * @typedef {String} Path
- */
-
-/**
- * @typedef {Object} FsEventsWatchContainer
- * @property {Set<Function>} listeners
- * @property {Function} rawEmitter
- * @property {{stop: Function}} watcher
- */
-
-// fsevents instance helper functions
-/**
- * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)
- * @type {Map<Path,FsEventsWatchContainer>}
- */
-const FSEventsWatchers = new Map();
-
-// Threshold of duplicate path prefixes at which to start
-// consolidating going forward
-const consolidateThreshhold = 10;
-
-const wrongEventFlags = new Set([
- 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912
-]);
-
-/**
- * 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};
-};
-
-/**
- * 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);
-
- // 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;
- }
-
- 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 + 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;
- }
- }
-
- 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);
- });
-
- cont.rawEmitter(info.event, fullPath, info);
- })
- };
- FSEventsWatchers.set(watchPath, cont);
- }
-
- // 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);
- });
- }
- };
-}
-
-// 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;
- }
- }
- }
-
- return false;
-};
-
-// returns boolean indicating whether fsevents can be used
-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 = 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;
- }
-
- ipaths.delete(path);
- ipaths.delete(path + ROOT_GLOBSTAR);
-}
-
-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);
-}
-
-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);
- }
- } 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);
- }
- }
-}
-
-handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {
- if (this.fsw.closed || this.checkIgnored(path)) return;
-
- 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);
-
- 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);
- }
-
- // 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);
- }
-}
-
-/**
- * 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
- );
-
- // 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);
- }
- } 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);
- }
- }
- };
-
- 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<void>}
- */
-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(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();
- }
- }
-}
-
-/**
- *
- * @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);
- }
-}
-
-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<void>}
- */
-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;
-
- 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;
- }
- if (stats.isDirectory()) {
- // emit addDir unless this is a glob parent
- if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);
-
- // don't recurse further if it would exceed depth setting
- if (priorDepth && priorDepth > opts.depth) return;
-
- // 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 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, sysPath$1.resolve(wh.watchPath)) + 1;
-
- 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 (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);
- }
- }
-}
-
-}
-
-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_CHANGE,
- EV_UNLINK,
- EV_ADD_DIR,
- EV_UNLINK_DIR,
- EV_RAW,
- EV_ERROR,
-
- STR_CLOSE,
- STR_END,
-
- BACK_SLASH_RE,
- DOUBLE_SLASH_RE,
- SLASH_OR_BACK_SLASH_RE,
- DOT_RE,
- REPLACER_RE,
-
- SLASH,
- SLASH_SLASH,
- BRACE_START,
- BANG,
- ONE_DOT,
- TWO_DOTS,
- GLOBSTAR,
- SLASH_GLOBSTAR,
- ANYMATCH_OPTS,
- STRING_TYPE,
- FUNCTION_TYPE,
- EMPTY_STR,
- EMPTY_FN,
-
- isWindows,
- isMacos,
- isIBMi
-} = constants$1;
-
-const stat = promisify(fs.stat);
-const readdir = promisify(fs.readdir);
-
-/**
- * @typedef {String} Path
- * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName
- * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType
- */
-
-/**
- *
- * @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
- */
-
-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;
-};
-
-const unifyPaths = (paths_) => {
- /**
- * @type {Array<String>}
- */
- 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;
-};
-
-// 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 (path.startsWith(BANG)) {
- return BANG + sysPath.join(cwd, path.slice(1));
- }
- return sysPath.join(cwd, path);
-};
-
-const undef = (opts, key) => opts[key] === undefined;
-
-/**
- * Directory entry.
- * @property {Path} path
- * @property {Set<Path>} items
- */
-class DirEntry {
- /**
- * @param {Path} dir
- * @param {Function} removeWatcher
- */
- constructor(dir, removeWatcher) {
- this.path = dir;
- this._removeWatcher = removeWatcher;
- /** @type {Set<Path>} */
- this.items = new Set();
- }
-
- add(item) {
- const {items} = this;
- if (!items) return;
- if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);
- }
-
- 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));
- }
- }
- }
-
- has(item) {
- const {items} = this;
- if (!items) return;
- return items.has(item);
- }
-
- /**
- * @returns {Array<String>}
- */
- 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);
- }
-}
-
-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;
- }
-
- 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) 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);
- }
-}
-
-/**
- * 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();
-
- const opts = {};
- if (_opts) Object.assign(opts, _opts); // for frozen objects
-
- /** @type {Map<String, DirEntry>} */
- this._watched = new Map();
- /** @type {Map<String, Array>} */
- this._closers = new Map();
- /** @type {Set<String>} */
- this._ignoredPaths = new Set();
-
- /** @type {Map<ThrottleType, Map>} */
- this._throttled = new Map();
-
- /** @type {Map<Path, String|Boolean>} */
- this._symlinkPaths = new Map();
-
- this._streams = new Set();
- this.closed = false;
-
- // 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;
-
- // Enable fsevents on OS X when polling isn't explicitly enabled.
- 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();
- if (!canUseFsEvents) opts.useFsEvents = false;
-
- // Use polling on Mac if not using fsevents.
- // Other platforms use non-polling fs_watch.
- if (undef(opts, 'usePolling') && !opts.useFsEvents) {
- 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;
- if (envPoll !== undefined) {
- const envLower = envPoll.toLowerCase();
-
- 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);
- }
-
- // 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 (undef(opts, 'followSymlinks')) opts.followSymlinks = true;
-
- 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);
-
- 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;
-
- // Initialize with proper watcher.
- if (opts.useFsEvents) {
- this._fsEventsHandler = new FsEventsHandler(this);
- } else {
- this._nodeFsHandler = new NodeFsHandler(this);
- }
-
- // You’re frozen when your heart’s not open.
- Object.freeze(opts);
-}
-
-// Public methods
-
-/**
- * Adds paths to be watched on an existing FSWatcher instance
- * @param {Path|Array<Path>} 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);
- });
- }
-
- // set aside negated glob strings
- paths = paths.filter((path) => {
- if (path.startsWith(BANG)) {
- this._ignoredPaths.add(path.slice(1));
- return false;
- }
-
- // if a path is being added that was previously ignored, stop ignoring it
- this._ignoredPaths.delete(path);
- this._ignoredPaths.delete(path + SLASH_GLOBSTAR);
-
- // reset the cached userIgnored anymatch fn
- // to make ignoredPaths changes effective
- this._userIgnored = undefined;
-
- return true;
- });
-
- 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));
- });
- });
- }
-
- return this;
-}
-
-/**
- * Close watchers or start ignoring events from specified paths.
- * @param {Path|Array<Path>} 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;
-
- 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);
- }
-
- this._closePath(path);
-
- this._ignoredPaths.add(path);
- if (this._watched.has(path)) {
- this._ignoredPaths.add(path + SLASH_GLOBSTAR);
- }
-
- // reset the cached userIgnored anymatch fn
- // to make ignoredPaths changes effective
- this._userIgnored = undefined;
- });
-
- return this;
-}
-
-/**
- * Close watchers and remove all listeners from watched paths.
- * @returns {Promise<void>}.
-*/
-close() {
- if (this.closed) return this._closePromise;
- this.closed = true;
-
- // 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();
- });
-
- this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();
- return this._closePromise;
-}
-
-/**
- * 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;
-}
-
-emitWithAll(event, args) {
- this.emit(...args);
- if (event !== EV_ERROR) this.emit(EV_ALL, ...args);
-}
-
-// Common helpers
-// --------------
-
-/**
- * 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;
-
- const opts = this.options;
- if (isWindows) path = sysPath.normalize(path);
- if (opts.cwd) path = sysPath.relative(opts.cwd, path);
- /** @type Array<any> */
- 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);
-
- const awf = opts.awaitWriteFinish;
- let pw;
- if (awf && (pw = this._pendingWrites.get(path))) {
- pw.lastChange = new Date();
- return this;
- }
-
- 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);
- }
- }
-
- 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);
- }
- };
-
- this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);
- return this;
- }
-
- if (event === EV_CHANGE) {
- const isThrottled = !this._throttle(EV_CHANGE, path, 50);
- if (isThrottled) return this;
- }
-
- 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);
-
- return this;
-}
-
-/**
- * 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;
-}
-
-/**
- * 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());
- }
-
- /** @type {Map<Path, Object>} */
- const action = this._throttled.get(actionType);
- /** @type {Object} */
- const actionPath = action.get(path);
-
- if (actionPath) {
- actionPath.count++;
- return false;
- }
-
- 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++;
-}
-
-/**
- * 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;
-
- let fullPath = path;
- if (this.options.cwd && !sysPath.isAbsolute(path)) {
- fullPath = sysPath.join(this.options.cwd, path);
- }
-
- const now = new Date();
-
- const awaitWriteFinish = (prevStat) => {
- fs.stat(fullPath, (err, curStat) => {
- if (err || !this._pendingWrites.has(path)) {
- if (err && err.code !== 'ENOENT') awfEmit(err);
- return;
- }
-
- const now = Number(new Date());
-
- 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
- );
- }
-}
-
-_getGlobIgnored() {
- return [...this._ignoredPaths.values()];
-}
-
-/**
- * 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;
-
- 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);
- }
-
- return this._userIgnored([path, stats]);
-}
-
-_isntIgnored(path, stat) {
- return !this._isIgnored(path, stat);
-}
-
-/**
- * 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;
-
- return new WatchHelper(path, watchPath, follow, this);
-}
-
-// Directory helpers
-// -----------------
-
-/**
- * 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);
-}
-
-// File helpers
-// ------------
-
-/**
- * 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;
-
- // 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);
-}
-
-/**
- * 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);
-
- // 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 the only watched file is removed, watch for its return
- if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {
- this.add(directory, item, true);
- }
-
- // 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();
-
- // Recursively remove children directories / files.
- nestedDirectoryChildren.forEach(nested => this._remove(path, nested));
-
- // Check if item was on the watched list and remove it
- const parent = this._getWatchedDir(directory);
- const wasTracked = parent.has(item);
- parent.remove(item);
-
- // 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 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;
- }
-
- // 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);
-
- // Avoid conflicts if we later create another file with the same name
- if (!this.options.useFsEvents) {
- this._closePath(path);
- }
-}
-
-/**
- * Closes all watchers for a path
- * @param {Path} path
- */
-_closePath(path) {
- this._closeFile(path);
- const dir = sysPath.dirname(path);
- this._getWatchedDir(dir).remove(sysPath.basename(path));
-}
-
-/**
- * Closes only file-specific watchers
- * @param {Path} path
- */
-_closeFile(path) {
- const closers = this._closers.get(path);
- if (!closers) return;
- closers.forEach(closer => closer());
- this._closers.delete(path);
-}
-
-/**
- *
- * @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);
-}
-
-_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;
-}
-
-}
-
-// Export FSWatcher class
-chokidar$1.FSWatcher = FSWatcher;
-
-/**
- * Instantiates watcher with paths to be tracked.
- * @param {String|Array<String>} 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;
-};
-
-chokidar$1.watch = watch;
-
var textTable = function (rows_, opts) {
if (!opts) opts = {};
var hsep = opts.hsep === undefined ? ' ' : opts.hsep;
@@ -25198,8 +30482,8 @@ var textTable = function (rows_, opts) {
return acc;
}, []);
- var rows = map$6(rows_, function (row) {
- return map$6(row, function (c_, ix) {
+ 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);
@@ -25220,8 +30504,8 @@ var textTable = function (rows_, opts) {
return acc;
}, []);
- return map$6(rows, function (row) {
- return map$6(row, function (c, ix) {
+ 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] === '.') {
@@ -25260,7 +30544,7 @@ function forEach (xs, f) {
}
}
-function map$6 (xs, f) {
+function map$2 (xs, f) {
if (xs.map) return xs.map(f);
var res = [];
for (var i = 0; i < xs.length; i++) {
@@ -25271,7 +30555,7 @@ function map$6 (xs, f) {
var camelcase$1 = {exports: {}};
-const preserveCamelCase = string => {
+const preserveCamelCase = (string, locale) => {
let isLastCharLower = false;
let isLastCharUpper = false;
let isLastLastCharUpper = false;
@@ -25279,37 +30563,46 @@ const preserveCamelCase = string => {
for (let i = 0; i < string.length; i++) {
const character = string[i];
- if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {
+ 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 && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {
+ } 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.toLowerCase() === character && character.toUpperCase() !== character;
+ isLastCharLower = character.toLocaleLowerCase(locale) === character && character.toLocaleUpperCase(locale) !== character;
isLastLastCharUpper = isLastCharUpper;
- isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;
+ isLastCharUpper = character.toLocaleUpperCase(locale) === character && character.toLocaleLowerCase(locale) !== character;
}
}
return string;
};
+const preserveConsecutiveUppercase = input => {
+ return input.replace(/^[\p{Lu}](?![\p{Lu}])/gu, m1 => m1.toLowerCase());
+};
+
+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));
+};
+
const camelCase = (input, options) => {
if (!(typeof input === 'string' || Array.isArray(input))) {
throw new TypeError('Expected the input to be `string | string[]`');
}
- options = Object.assign({
- pascalCase: false
- }, options);
-
- const postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;
+ options = {
+ pascalCase: false,
+ preserveConsecutiveUppercase: false,
+ ...options
+ };
if (Array.isArray(input)) {
input = input.map(x => x.trim())
@@ -25324,29 +30617,37 @@ const camelCase = (input, options) => {
}
if (input.length === 1) {
- return options.pascalCase ? input.toUpperCase() : input.toLowerCase();
+ return options.pascalCase ? input.toLocaleUpperCase(options.locale) : input.toLocaleLowerCase(options.locale);
}
- const hasUpperCase = input !== input.toLowerCase();
+ const hasUpperCase = input !== input.toLocaleLowerCase(options.locale);
if (hasUpperCase) {
- input = preserveCamelCase(input);
+ input = preserveCamelCase(input, options.locale);
}
- input = input
- .replace(/^[_.\- ]+/, '')
- .toLowerCase()
- .replace(/[_.\- ]+(\w|$)/g, (_, p1) => p1.toUpperCase())
- .replace(/\d+(\w|$)/g, m => m.toUpperCase());
+ input = input.replace(/^[_.\- ]+/, '');
+
+ if (options.preserveConsecutiveUppercase) {
+ input = preserveConsecutiveUppercase(input);
+ } else {
+ input = input.toLocaleLowerCase();
+ }
+
+ if (options.pascalCase) {
+ input = input.charAt(0).toLocaleUpperCase(options.locale) + input.slice(1);
+ }
- return postProcess(input);
+ return postProcess(input, options);
};
camelcase$1.exports = camelCase;
// TODO: Remove this for the next major release
camelcase$1.exports.default = camelCase;
-var minimist$1 = function (args, opts) {
+var camelcase = camelcase$1.exports;
+
+var minimist = function (args, opts) {
if (!opts) opts = {};
var flags = { bools : {}, strings : {}, unknownFn: null };
@@ -25646,7 +30947,7 @@ let token;
let key;
let root$1;
-var parse$4 = function parse (text, reviver) {
+var parse$1 = function parse (text, reviver) {
source = String(text);
parseState = 'start';
stack = [];
@@ -25692,14 +30993,14 @@ function internalize (holder, name, reviver) {
}
let lexState;
-let buffer$2;
+let buffer;
let doubleQuote;
let sign;
let c;
function lex () {
lexState = 'default';
- buffer$2 = '';
+ buffer = '';
doubleQuote = false;
sign = 1;
@@ -25880,12 +31181,12 @@ const lexStates = {
return
case '.':
- buffer$2 = read();
+ buffer = read();
lexState = 'decimalPointLeading';
return
case '0':
- buffer$2 = read();
+ buffer = read();
lexState = 'zero';
return
@@ -25898,7 +31199,7 @@ const lexStates = {
case '7':
case '8':
case '9':
- buffer$2 = read();
+ buffer = read();
lexState = 'decimalInteger';
return
@@ -25915,7 +31216,7 @@ const lexStates = {
case '"':
case "'":
doubleQuote = (read() === '"');
- buffer$2 = '';
+ buffer = '';
lexState = 'string';
return
}
@@ -25943,7 +31244,7 @@ const lexStates = {
break
}
- buffer$2 += u;
+ buffer += u;
lexState = 'identifierName';
},
@@ -25953,7 +31254,7 @@ const lexStates = {
case '_':
case '\u200C':
case '\u200D':
- buffer$2 += read();
+ buffer += read();
return
case '\\':
@@ -25963,11 +31264,11 @@ const lexStates = {
}
if (util.isIdContinueChar(c)) {
- buffer$2 += read();
+ buffer += read();
return
}
- return newToken('identifier', buffer$2)
+ return newToken('identifier', buffer)
},
identifierNameEscape () {
@@ -25992,19 +31293,19 @@ const lexStates = {
break
}
- buffer$2 += u;
+ buffer += u;
lexState = 'identifierName';
},
sign () {
switch (c) {
case '.':
- buffer$2 = read();
+ buffer = read();
lexState = 'decimalPointLeading';
return
case '0':
- buffer$2 = read();
+ buffer = read();
lexState = 'zero';
return
@@ -26017,7 +31318,7 @@ const lexStates = {
case '7':
case '8':
case '9':
- buffer$2 = read();
+ buffer = read();
lexState = 'decimalInteger';
return
@@ -26038,19 +31339,19 @@ const lexStates = {
zero () {
switch (c) {
case '.':
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalPoint';
return
case 'e':
case 'E':
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalExponent';
return
case 'x':
case 'X':
- buffer$2 += read();
+ buffer += read();
lexState = 'hexadecimal';
return
}
@@ -26061,28 +31362,28 @@ const lexStates = {
decimalInteger () {
switch (c) {
case '.':
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalPoint';
return
case 'e':
case 'E':
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalExponent';
return
}
if (util.isDigit(c)) {
- buffer$2 += read();
+ buffer += read();
return
}
- return newToken('numeric', sign * Number(buffer$2))
+ return newToken('numeric', sign * Number(buffer))
},
decimalPointLeading () {
if (util.isDigit(c)) {
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalFraction';
return
}
@@ -26094,48 +31395,48 @@ const lexStates = {
switch (c) {
case 'e':
case 'E':
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalExponent';
return
}
if (util.isDigit(c)) {
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalFraction';
return
}
- return newToken('numeric', sign * Number(buffer$2))
+ return newToken('numeric', sign * Number(buffer))
},
decimalFraction () {
switch (c) {
case 'e':
case 'E':
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalExponent';
return
}
if (util.isDigit(c)) {
- buffer$2 += read();
+ buffer += read();
return
}
- return newToken('numeric', sign * Number(buffer$2))
+ return newToken('numeric', sign * Number(buffer))
},
decimalExponent () {
switch (c) {
case '+':
case '-':
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalExponentSign';
return
}
if (util.isDigit(c)) {
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalExponentInteger';
return
}
@@ -26145,7 +31446,7 @@ const lexStates = {
decimalExponentSign () {
if (util.isDigit(c)) {
- buffer$2 += read();
+ buffer += read();
lexState = 'decimalExponentInteger';
return
}
@@ -26155,16 +31456,16 @@ const lexStates = {
decimalExponentInteger () {
if (util.isDigit(c)) {
- buffer$2 += read();
+ buffer += read();
return
}
- return newToken('numeric', sign * Number(buffer$2))
+ return newToken('numeric', sign * Number(buffer))
},
hexadecimal () {
if (util.isHexDigit(c)) {
- buffer$2 += read();
+ buffer += read();
lexState = 'hexadecimalInteger';
return
}
@@ -26174,36 +31475,36 @@ const lexStates = {
hexadecimalInteger () {
if (util.isHexDigit(c)) {
- buffer$2 += read();
+ buffer += read();
return
}
- return newToken('numeric', sign * Number(buffer$2))
+ return newToken('numeric', sign * Number(buffer))
},
string () {
switch (c) {
case '\\':
read();
- buffer$2 += escape();
+ buffer += escape();
return
case '"':
if (doubleQuote) {
read();
- return newToken('string', buffer$2)
+ return newToken('string', buffer)
}
- buffer$2 += read();
+ buffer += read();
return
case "'":
if (!doubleQuote) {
read();
- return newToken('string', buffer$2)
+ return newToken('string', buffer)
}
- buffer$2 += read();
+ buffer += read();
return
case '\n':
@@ -26219,7 +31520,7 @@ const lexStates = {
throw invalidChar(read())
}
- buffer$2 += read();
+ buffer += read();
},
start () {
@@ -26240,7 +31541,7 @@ const lexStates = {
switch (c) {
case '$':
case '_':
- buffer$2 = read();
+ buffer = read();
lexState = 'identifierName';
return
@@ -26260,7 +31561,7 @@ const lexStates = {
}
if (util.isIdStartChar(c)) {
- buffer$2 += read();
+ buffer += read();
lexState = 'identifierName';
return
}
@@ -26457,7 +31758,7 @@ const parseStates = {
throw invalidEOF()
}
- push();
+ push$1();
},
beforePropertyName () {
@@ -26503,7 +31804,7 @@ const parseStates = {
throw invalidEOF()
}
- push();
+ push$1();
},
beforeArrayValue () {
@@ -26516,7 +31817,7 @@ const parseStates = {
return
}
- push();
+ push$1();
},
afterPropertyValue () {
@@ -26573,7 +31874,7 @@ const parseStates = {
},
};
-function push () {
+function push$1 () {
let value;
switch (token.type) {
@@ -26722,7 +32023,7 @@ function syntaxError (message) {
return err
}
-var stringify$3 = function stringify (value, replacer, space) {
+var stringify = function stringify (value, replacer, space) {
const stack = [];
let indent = '';
let propertyList;
@@ -26983,221 +32284,258 @@ var stringify$3 = function stringify (value, replacer, space) {
};
const JSON5 = {
- parse: parse$4,
- stringify: stringify$3,
+ parse: parse$1,
+ stringify,
};
-var lib$3 = JSON5;
+var lib = JSON5;
-var dist$1 = /*#__PURE__*/Object.freeze({
- __proto__: null,
- 'default': lib$3
-});
+/**
+ * @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]
+ */
-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: "<path>"
- },
- {
- long: "ignore-path",
- description: "specify ignore file",
- short: "i",
- type: "string",
- value: "<path>"
- },
- {
- long: "setting",
- description: "specify settings",
- short: "s",
- type: "string",
- value: "<settings>"
- },
- {
- long: "ext",
- description: "specify extensions",
- short: "e",
- type: "string",
- value: "<extensions>"
- },
- {
- long: "use",
- description: "use plugins",
- short: "u",
- type: "string",
- value: "<plugins>"
- },
- {
- 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: "<reporter>"
- },
- {
- long: "file-path",
- description: "specify path to process as",
- type: "string",
- value: "<path>"
- },
- {
- 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: "<globs>"
- },
- {
- 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
- }
+/** @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: '<path>'
+ },
+ {
+ long: 'ignore-path',
+ description: 'specify ignore file',
+ short: 'i',
+ type: 'string',
+ value: '<path>'
+ },
+ {
+ long: 'setting',
+ description: 'specify settings',
+ short: 's',
+ type: 'string',
+ value: '<settings>'
+ },
+ {
+ long: 'ext',
+ description: 'specify extensions',
+ short: 'e',
+ type: 'string',
+ value: '<extensions>'
+ },
+ {
+ long: 'use',
+ description: 'use plugins',
+ short: 'u',
+ type: 'string',
+ value: '<plugins>'
+ },
+ {
+ 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: '<reporter>'
+ },
+ {
+ long: 'file-path',
+ description: 'specify path to process as',
+ type: 'string',
+ value: '<path>'
+ },
+ {
+ 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: '<globs>'
+ },
+ {
+ 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 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;
+/**
+ * @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<EngineOptions, 'cwd'> & ArgsOptionsFields} Options
+ */
-var options_1 = options$1;
+const own$7 = {}.hasOwnProperty;
-// Schema for `minimist`.
-var minischema = {
+/**
+ * Schema for `minimist`.
+ */
+const minischema = {
unknown: handleUnknownArgument,
+ /** @type {Record<string, string|boolean|null>} */
default: {},
+ /** @type {Record<string, string>} */
alias: {},
+ /** @type {string[]} */
string: [],
+ /** @type {string[]} */
boolean: []
};
-schema$1.forEach(addEach);
+let index = -1;
+while (++index < schema.length) {
+ addEach(schema[index]);
+}
-// 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;
+/**
+ * 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;
- schema$1.forEach(function (option) {
+ while (++index < schema.length) {
+ const option = schema[index];
if (option.type === 'string' && config[option.long] === '') {
throw fault('Missing value:%s', inspect(option).join(' '))
}
- });
-
- ext = commaSeparated(config.ext);
- report = reporter(config.report);
+ }
- help = [
- inspectAll(schema$1),
+ const ext = commaSeparated(/** @type {string} */ (config.ext));
+ const report = reporter(/** @type {string} */ (config.report));
+ const help = [
+ inspectAll(schema),
'',
'Examples:',
'',
@@ -27213,7 +32551,6 @@ function options$1(flags, configuration) {
return {
helpMessage: help,
- // “hidden” feature, makes testing easier.
cwd: configuration.cwd,
processor: configuration.processor,
help: config.help,
@@ -27232,15 +32569,19 @@ function options$1(flags, configuration) {
packageField: configuration.packageField,
rcPath: config.rcPath,
detectConfig: config.config,
- settings: settings(config.setting),
+ settings: /** @type {Record<string, unknown>} */ (
+ settings(/** @type {string} */ (config.setting))
+ ),
ignoreName: configuration.ignoreName,
ignorePath: config.ignorePath,
ignorePathResolveFrom: config.ignorePathResolveFrom,
- ignorePatterns: commaSeparated(config.ignorePattern),
+ ignorePatterns: commaSeparated(
+ /** @type {string} */ (config.ignorePattern)
+ ),
silentlyIgnore: config.silentlyIgnore,
detectIgnore: config.ignore,
pluginPrefix: configuration.pluginPrefix,
- plugins: plugins(config.use),
+ plugins: plugins$2(/** @type {string} */ (config.use)),
reporter: report[0],
reporterOptions: report[1],
color: config.color,
@@ -27250,12 +32591,15 @@ function options$1(flags, configuration) {
}
}
+/**
+ * @param {Option} option
+ */
function addEach(option) {
- var value = option.default;
+ const value = option.default;
minischema.default[option.long] = value === undefined ? null : value;
- if (option.type in minischema) {
+ if (option.type && option.type in minischema) {
minischema[option.type].push(option.long);
}
@@ -27264,116 +32608,165 @@ function addEach(option) {
}
}
-// Parse `extensions`.
+/**
+ * Parse `extensions`.
+ *
+ * @param {string[]|string|null|undefined} value
+ * @returns {string[]}
+ */
function commaSeparated(value) {
- return flatten(normalize(value).map(splitList))
+ return flatten(normalize(value).map((d) => splitList(d)))
}
-// Parse `plugins`.
-function plugins(value) {
- var result = {};
+/**
+ * Parse `plugins`.
+ *
+ * @param {string[]|string|null|undefined} value
+ * @returns {Record<string, Record<string, unknown>|undefined>}
+ */
+function plugins$2(value) {
+ const normalized = normalize(value).map((d) => splitOptions(d));
+ let index = -1;
+ /** @type {Record<string, Record<string, unknown>|undefined>} */
+ const result = {};
- normalize(value)
- .map(splitOptions)
- .forEach(function (value) {
- result[value[0]] = value[1] ? parseConfig(value[1], {}) : null;
- });
+ while (++index < normalized.length) {
+ const value = normalized[index];
+ result[value[0]] = value[1] ? parseConfig(value[1], {}) : undefined;
+ }
return result
}
-// Parse `reporter`: only one is accepted.
+/**
+ * Parse `reporter`: only one is accepted.
+ *
+ * @param {string[]|string|null|undefined} value
+ * @returns {[string|undefined, Record<string, unknown>|undefined]}
+ */
function reporter(value) {
- var all = normalize(value)
- .map(splitOptions)
- .map(function (value) {
- return [value[0], value[1] ? parseConfig(value[1], {}) : null]
- });
+ const all = normalize(value)
+ .map((d) => splitOptions(d))
+ .map(
+ /**
+ * @returns {[string, Record<string, unknown>|undefined]}
+ */
+ (value) => [value[0], value[1] ? parseConfig(value[1], {}) : undefined]
+ );
return all[all.length - 1] || []
}
-// Parse `settings`.
+/**
+ * Parse `settings`.
+ *
+ * @param {string[]|string|null|undefined} value
+ * @returns {Record<string, unknown>}
+ */
function settings(value) {
- var cache = {};
+ const normalized = normalize(value);
+ let index = -1;
+ /** @type {Record<string, unknown>} */
+ const cache = {};
- normalize(value).forEach(function (value) {
- parseConfig(value, cache);
- });
+ while (++index < normalized.length) {
+ parseConfig(normalized[index], cache);
+ }
return cache
}
-// Parse configuration.
-function parseConfig(flags, cache) {
- var flag;
- var message;
+/**
+ * Parse configuration.
+ *
+ * @param {string} value
+ * @param {Record<string, unknown>} cache
+ * @returns {Record<string, unknown>}
+ */
+function parseConfig(value, cache) {
+ /** @type {Record<string, unknown>} */
+ let flags;
+ /** @type {string} */
+ let flag;
try {
- flags = toCamelCase(parseJSON(flags));
+ flags = toCamelCase(parseJSON(value));
} catch (error) {
- // Fix position
- message = error.message.replace(/at(?= position)/, 'around');
-
- throw fault('Cannot parse `%s` as JSON: %s', flags, message)
+ throw fault(
+ 'Cannot parse `%s` as JSON: %s',
+ value,
+ // Fix position
+ error.message.replace(/at(?= position)/, 'around')
+ )
}
for (flag in flags) {
- cache[flag] = flags[flag];
+ if (own$7.call(flags, flag)) {
+ cache[flag] = flags[flag];
+ }
}
return cache
}
-// Handle an unknown flag.
+/**
+ * Handle an unknown flag.
+ *
+ * @param {string} flag
+ * @returns {boolean}
+ */
function handleUnknownArgument(flag) {
- // Glob.
- if (flag.charAt(0) !== '-') {
- return
- }
-
- // Long options, always unknown.
- if (flag.charAt(1) === '-') {
- throw fault('Unknown option `%s`, expected:\n%s', flag, inspectAll(schema$1))
- }
-
- // Short options, can be grouped.
- flag.slice(1).split('').forEach(each);
-
- function each(key) {
- var length = schema$1.length;
- var index = -1;
- var option;
+ // 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)
+ )
+ }
- while (++index < length) {
- option = schema$1[index];
+ // 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;
- if (option.short === key) {
- return
+ while (++index < found.length) {
+ const key = found[index];
+ if (!knownKeys.has(key)) {
+ throw fault(
+ 'Unknown short option `-%s`, expected:\n%s',
+ key,
+ inspectAll(known)
+ )
}
}
-
- throw fault(
- 'Unknown short option `-%s`, expected:\n%s',
- key,
- inspectAll(schema$1.filter(short))
- )
}
- function short(option) {
- return option.short
- }
+ return true
}
-// Inspect all `options`.
+/**
+ * Inspect all `options`.
+ *
+ * @param {Option[]} options
+ * @returns {string}
+ */
function inspectAll(options) {
- return table(options.map(inspect))
+ return textTable(options.map((d) => inspect(d)))
}
-// Inspect one `option`.
+/**
+ * Inspect one `option`.
+ *
+ * @param {Option} option
+ * @returns {string[]}
+ */
function inspect(option) {
- var description = option.description;
- var long = option.long;
+ let description = option.description;
+ let long = option.long;
if (option.default === true || option.truelike) {
description += ' (on by default)';
@@ -27388,7 +32781,12 @@ function inspect(option) {
]
}
-// Normalize `value`.
+/**
+ * Normalize `value`.
+ *
+ * @param {string[]|string|null|undefined} value
+ * @returns {string[]}
+ */
function normalize(value) {
if (!value) {
return []
@@ -27398,82 +32796,114 @@ function normalize(value) {
return [value]
}
- return flatten(value.map(normalize))
+ return flatten(value.map((d) => normalize(d)))
}
-// Flatten `values`.
+/**
+ * Flatten `values`.
+ *
+ * @param {string|string[]|string[][]} values
+ * @returns {string[]}
+ */
function flatten(values) {
- return [].concat.apply([], values)
+ // @ts-expect-error: TS is wrong.
+ return values.flat()
}
+/**
+ * @param {string} value
+ * @returns {string[]}
+ */
function splitOptions(value) {
return value.split('=')
}
+/**
+ * @param {string} value
+ * @returns {string[]}
+ */
function splitList(value) {
return value.split(',')
}
-// Transform the keys on an object to camel-case, recursivly.
+/**
+ * Transform the keys on an object to camel-case, recursivly.
+ *
+ * @param {Record<string, unknown>} object
+ * @returns {Record<string, unknown>}
+ */
function toCamelCase(object) {
- var result = {};
- var value;
- var key;
+ /** @type {Record<string, unknown>} */
+ const result = {};
+ /** @type {string} */
+ let key;
for (key in object) {
- value = object[key];
+ if (own$7.call(object, key)) {
+ let value = object[key];
- if (value && typeof value === 'object' && !('length' in value)) {
- value = toCamelCase(value);
- }
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
+ // @ts-expect-error: looks like an object.
+ value = toCamelCase(value);
+ }
- result[camelcase(key)] = value;
+ result[camelcase(key)] = value;
+ }
}
return result
}
-// Parse a (lazy?) JSON config.
+/**
+ * Parse a (lazy?) JSON config.
+ *
+ * @param {string} value
+ * @returns {Record<string, unknown>}
+ */
function parseJSON(value) {
- return json5.parse('{' + value + '}')
+ return lib.parse('{' + value + '}')
}
-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$2 = Function.prototype;
+/**
+ * @typedef {import('unified-engine').Options} EngineOptions
+ * @typedef {import('unified-engine').Context} EngineContext
+ * @typedef {import('unified-engine').Callback} EngineCallback
+ * @typedef {import('./options.js').Options} Options
+ */
// Fake TTY stream.
-var ttyStream = new stream.Readable();
-ttyStream.isTTY = true;
+const ttyStream = Object.assign(new stream.Readable(), {isTTY: true});
// Exit, lazily, with the correct exit status code.
-var exitStatus = 0;
+let exitStatus = 0;
-process.on('exit', onexit);
+process$2.on('exit', onexit);
// Handle uncaught errors, such as from unexpected async behaviour.
-process.on('uncaughtException', fail$1);
+process$2.on('uncaughtException', fail);
-// Start the CLI.
-function start$3(cliConfig) {
- var config;
- var output;
- var watcher;
+/**
+ * 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;
try {
- config = options(process.argv.slice(2), cliConfig);
+ // @ts-expect-error: Close enough.
+ config = options(process$2.argv.slice(2), cliConfig);
} catch (error) {
- return fail$1(error, true)
+ return fail(error, true)
}
if (config.help) {
- process.stdout.write(
+ process$2.stdout.write(
[
'Usage: ' + cliConfig.name + ' [options] [path | glob ...]',
'',
@@ -27484,14 +32914,14 @@ function start$3(cliConfig) {
config.helpMessage,
''
].join('\n'),
- noop$2
+ noop$1
);
return
}
if (config.version) {
- process.stdout.write(cliConfig.version + '\n', noop$2);
+ process$2.stdout.write(cliConfig.version + '\n', noop$1);
return
}
@@ -27506,18 +32936,18 @@ function start$3(cliConfig) {
// Do not write to stdout(4).
config.out = false;
- process.stderr.write(
- chalk.bold('Watching...') + ' (press CTRL+C to exit)\n',
- noop$2
+ process$2.stderr.write(
+ source$1.bold('Watching...') + ' (press CTRL+C to exit)\n',
+ noop$1
);
// Prevent infinite loop if set to regeneration.
if (output === true) {
config.output = false;
- process.stderr.write(
- chalk.yellow('Note') + ': Ignoring `--output` until exit.\n',
- noop$2
+ process$2.stderr.write(
+ source$1.yellow('Note') + ': Ignoring `--output` until exit.\n',
+ noop$1
);
}
}
@@ -27525,15 +32955,19 @@ function start$3(cliConfig) {
// Initial run.
engine(config, done);
- // Handle complete run.
- function done(err, code, context) {
- if (err) {
+ /**
+ * Handle complete run.
+ *
+ * @type {EngineCallback}
+ */
+ function done(error, code, context) {
+ if (error) {
clean();
- fail$1(err);
+ fail(error);
} else {
- exitStatus = code;
+ exitStatus = code || 0;
- if (config.watch && !watcher) {
+ if (config.watch && !watcher && context) {
subscribe(context);
}
}
@@ -27543,28 +32977,33 @@ function start$3(cliConfig) {
function clean() {
if (watcher) {
watcher.close();
- watcher = null;
+ watcher = undefined;
}
}
- // Subscribe a chokidar watcher to all processed files.
+ /**
+ * 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', onchange);
-
- process.on('SIGINT', onsigint);
-
- function onchange(filePath) {
- config.files = [filePath];
+ .on('change', (filePath) => {
+ config.files = [filePath];
+ engine(config, done);
+ });
- engine(config, done);
- }
+ process$2.on('SIGINT', onsigint);
+ /**
+ * Handle a SIGINT.
+ */
function onsigint() {
// Hide the `^C` in terminal.
- process.stderr.write('\n', noop$2);
+ process$2.stderr.write('\n', noop$1);
clean();
@@ -27578,26 +33017,31 @@ function start$3(cliConfig) {
}
}
-// 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;
+/**
+ * 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);
exitStatus = 1;
- process.stderr.write(message.trim() + '\n', noop$2);
+ process$2.stderr.write(message.trim() + '\n', noop$1);
}
function onexit() {
/* eslint-disable unicorn/no-process-exit */
- process.exit(exitStatus);
+ process$2.exit(exitStatus);
/* eslint-enable unicorn/no-process-exit */
}
-var unifiedArgs = lib$2;
+function noop$1() {}
-var require$$0$3 = [
+var require$$0 = [
"md",
"markdown",
"mdown",
@@ -27608,13 +33052,16 @@ var require$$0$3 = [
"ron"
];
-var markdownExtensions = require$$0$3;
-
-var bail_1 = bail$1;
+var markdownExtensions = require$$0;
-function bail$1(err) {
- if (err) {
- throw err
+/**
+ * Throw a given error.
+ *
+ * @param {Error | null | undefined} [error]
+ */
+function bail(error) {
+ if (error) {
+ throw error
}
}
@@ -27680,7 +33127,7 @@ var getProperty = function getProperty(obj, name) {
return obj[name];
};
-var extend$2 = function extend() {
+var extend = function extend() {
var options, name, src, copy, copyIsArray, clone;
var target = arguments[0];
var i = 1;
@@ -27734,396 +33181,66 @@ var extend$2 = function extend() {
return target;
};
-var stringify$2 = unistUtilStringifyPosition;
-
-var vfileMessage = VMessage$1;
-
-// Inherit from `Error#`.
-function VMessagePrototype() {}
-VMessagePrototype.prototype = Error.prototype;
-VMessage$1.prototype = new VMessagePrototype();
-
-// Message properties.
-var proto = VMessage$1.prototype;
-
-proto.file = '';
-proto.name = '';
-proto.reason = '';
-proto.message = '';
-proto.stack = '';
-proto.fatal = null;
-proto.column = null;
-proto.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$1(reason, position, origin) {
- var parts;
- var range;
- var location;
-
- if (typeof position === 'string') {
- origin = position;
- position = null;
- }
-
- parts = parseOrigin(origin);
- range = stringify$2(position) || '1:1';
-
- location = {
- start: {line: null, column: null},
- end: {line: null, column: null}
- };
-
- // Node.
- if (position && position.position) {
- position = position.position;
- }
-
- if (position) {
- // Position.
- if (position.start) {
- location = position;
- position = position.start;
- } else {
- // Point.
- location.start = position;
- }
- }
-
- if (reason.stack) {
- this.stack = reason.stack;
- reason = reason.message;
- }
-
- 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;
-
- 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);
- }
- }
-
- return result
-}
-
-var minpath = require$$0__default$2['default'];
-
-var minproc = process;
-
-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
- }
-
- if (!(this instanceof VFile$1)) {
- return new VFile$1(options)
- }
-
- this.data = {};
- this.messages = [];
- this.history = [];
- this.cwd = proc$1.cwd();
-
- // Set path related properties in the correct order.
- index = -1;
-
- while (++index < order$3.length) {
- prop = order$3[index];
-
- if (own$c.call(options, prop)) {
- this[prop] = options[prop];
- }
- }
-
- // Set non-path related properties.
- for (prop in options) {
- if (order$3.indexOf(prop) < 0) {
- this[prop] = options[prop];
- }
- }
-}
-
-function getPath() {
- return this.history[this.history.length - 1]
-}
-
-function setPath(path) {
- assertNonEmpty(path, 'path');
-
- if (this.path !== path) {
- this.history.push(path);
- }
-}
-
-function getDirname() {
- return typeof this.path === 'string' ? p.dirname(this.path) : undefined
-}
-
-function setDirname(dirname) {
- assertPath(this.path, 'dirname');
- this.path = p.join(dirname || '', this.basename);
-}
-
-function getBasename() {
- return typeof this.path === 'string' ? p.basename(this.path) : undefined
-}
-
-function setBasename(basename) {
- assertNonEmpty(basename, 'basename');
- assertPart(basename, 'basename');
- this.path = p.join(this.dirname || '', basename);
-}
-
-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 || ''));
-}
-
-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 + '` cannot be a path: did not expect `' + p.sep + '`'
- )
- }
-}
-
-// Assert that `part` is not empty.
-function assertNonEmpty(part, name) {
- if (!part) {
- throw new Error('`' + name + '` cannot be empty')
- }
-}
-
-// Assert `path` exists.
-function assertPath(path, name) {
- if (!path) {
- throw new Error('Setting `' + name + '` requires `path` to be set too')
- }
-}
-
-var VMessage = vfileMessage;
-var VFile = core$1;
-
-var lib$1 = VFile;
-
-VFile.prototype.message = message;
-VFile.prototype.info = info;
-VFile.prototype.fail = fail;
-
-// 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);
-
- if (this.path) {
- message.name = this.path + ':' + message.name;
- message.file = this.path;
- }
-
- message.fatal = false;
-
- this.messages.push(message);
-
- return message
-}
-
-// Fail: creates a vmessage, associates it with the file, and throws it.
-function fail() {
- var message = this.message.apply(this, arguments);
-
- message.fatal = true;
-
- throw message
-}
-
-// Info: creates a vmessage, associates it with the file, and marks the fatality
-// as null.
-function info() {
- var message = this.message.apply(this, arguments);
-
- message.fatal = null;
-
- return message
-}
-
-var vfile$1 = lib$1;
-
-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('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
+ */
// Expose a frozen processor.
-var unified_1 = unified$1().freeze();
-
-var slice$1 = [].slice;
-var own$b = {}.hasOwnProperty;
-
-// Process pipeline.
-var pipeline = trough()
- .use(pipelineParse)
- .use(pipelineRun)
- .use(pipelineStringify);
+const unified = base().freeze();
-function pipelineParse(p, ctx) {
- ctx.tree = p.parse(ctx.file);
-}
-
-function pipelineRun(p, ctx, next) {
- p.run(ctx.tree, ctx.file, done);
-
- function done(error, tree, file) {
- if (error) {
- next(error);
- } else {
- ctx.tree = tree;
- ctx.file = file;
- next();
- }
- }
-}
-
-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;
- }
-
- ctx.file.contents = result;
- } else {
- ctx.file.result = result;
- }
-}
+const own$6 = {}.hasOwnProperty;
// Function to create the first processor.
-function unified$1() {
- var attachers = [];
- var transformers = trough();
- var namespace = {};
- var freezeIndex = -1;
- var frozen;
+/**
+ * @returns {Processor}
+ */
+function base() {
+ const transformers = trough();
+ /** @type {Processor['attachers']} */
+ const attachers = [];
+ /** @type {Record<string, unknown>} */
+ let namespace = {};
+ /** @type {boolean|undefined} */
+ let frozen;
+ let freezeIndex = -1;
// Data management.
+ // @ts-expect-error: overloads are handled.
processor.data = data;
+ processor.Parser = undefined;
+ processor.Compiler = undefined;
// Lock.
processor.freeze = freeze;
// Plugins.
processor.attachers = attachers;
+ // @ts-expect-error: overloads are handled.
processor.use = use;
// 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;
@@ -28131,60 +33248,25 @@ function unified$1() {
return processor
// Create a new processor based on the processor in the current scope.
+ /** @type {Processor} */
function processor() {
- var destination = unified$1();
- var index = -1;
+ const destination = base();
+ let index = -1;
while (++index < attachers.length) {
- destination.use.apply(null, attachers[index]);
+ destination.use(...attachers[index]);
}
- destination.data(extend$1(true, {}, namespace));
+ destination.data(extend(true, {}, namespace));
return destination
}
- // 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
- }
-
- while (++freezeIndex < attachers.length) {
- values = attachers[freezeIndex];
-
- if (values[1] === false) {
- continue
- }
-
- if (values[1] === true) {
- values[1] = undefined;
- }
-
- transformer = values[0].apply(processor, values.slice(1));
-
- if (typeof transformer === 'function') {
- transformers.use(transformer);
- }
- }
-
- frozen = true;
- freezeIndex = Infinity;
-
- return processor
- }
-
- // Data management.
- // Getter / setter for processor-specific informtion.
+ /**
+ * @param {string|Record<string, unknown>} [key]
+ * @param {unknown} [value]
+ * @returns {unknown}
+ */
function data(key, value) {
if (typeof key === 'string') {
// Set `key`.
@@ -28195,7 +33277,7 @@ function unified$1() {
}
// Get `key`.
- return (own$b.call(namespace, key) && namespace[key]) || null
+ return (own$6.call(namespace, key) && namespace[key]) || null
}
// Set space.
@@ -28209,132 +33291,213 @@ function unified$1() {
return namespace
}
- // 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;
+ /** @type {Processor['freeze']} */
+ function freeze() {
+ if (frozen) {
+ return processor
+ }
+
+ while (++freezeIndex < attachers.length) {
+ const [attacher, ...options] = attachers[freezeIndex];
+
+ if (options[0] === false) {
+ continue
+ }
+
+ if (options[0] === true) {
+ options[1] = undefined;
+ }
+
+ /** @type {Transformer|void} */
+ const transformer = attacher.call(processor, ...options);
+
+ if (typeof transformer === 'function') {
+ transformers.use(transformer);
+ }
+ }
+
+ frozen = true;
+ freezeIndex = Number.POSITIVE_INFINITY;
+
+ return processor
+ }
+
+ /**
+ * @param {Pluggable|null|undefined} [value]
+ * @param {...unknown} options
+ * @returns {Processor}
+ */
+ function use(value, ...options) {
+ /** @type {Record<string, unknown>|undefined} */
+ let settings;
assertUnfrozen('use', frozen);
if (value === null || value === undefined) ; else if (typeof value === 'function') {
- addPlugin.apply(null, arguments);
+ addPlugin(value, ...options);
} else if (typeof value === 'object') {
- if ('length' in value) {
+ if (Array.isArray(value)) {
addList(value);
} else {
addPreset(value);
}
} else {
- throw new Error('Expected usable value, not `' + value + '`')
+ throw new TypeError('Expected usable value, not `' + value + '`')
}
if (settings) {
- namespace.settings = extend$1(namespace.settings || {}, settings);
+ namespace.settings = Object.assign(namespace.settings || {}, settings);
}
return processor
- function addPreset(result) {
- addList(result.plugins);
-
- if (result.settings) {
- settings = extend$1(settings || {}, result.settings);
- }
- }
-
+ /**
+ * @param {import('..').Pluggable<unknown[]>} value
+ * @returns {void}
+ */
function add(value) {
if (typeof value === 'function') {
addPlugin(value);
} else if (typeof value === 'object') {
- if ('length' in value) {
- addPlugin.apply(null, value);
+ if (Array.isArray(value)) {
+ const [plugin, ...options] = value;
+ addPlugin(plugin, ...options);
} else {
addPreset(value);
}
} else {
- throw new Error('Expected usable value, not `' + value + '`')
+ throw new TypeError('Expected usable value, not `' + value + '`')
}
}
+ /**
+ * @param {Preset} result
+ * @returns {void}
+ */
+ function addPreset(result) {
+ addList(result.plugins);
+
+ if (result.settings) {
+ settings = Object.assign(settings || {}, result.settings);
+ }
+ }
+
+ /**
+ * @param {PluggableList|null|undefined} [plugins]
+ * @returns {void}
+ */
function addList(plugins) {
- var index = -1;
+ let index = -1;
- if (plugins === null || plugins === undefined) ; else if (typeof plugins === 'object' && 'length' in plugins) {
+ if (plugins === null || plugins === undefined) ; else if (Array.isArray(plugins)) {
while (++index < plugins.length) {
- add(plugins[index]);
+ const thing = plugins[index];
+ add(thing);
}
} else {
- throw new Error('Expected a list of plugins, not `' + plugins + '`')
+ throw new TypeError('Expected a list of plugins, not `' + plugins + '`')
}
}
+ /**
+ * @param {Plugin} plugin
+ * @param {...unknown} [value]
+ * @returns {void}
+ */
function addPlugin(plugin, value) {
- var entry = find(plugin);
+ let index = -1;
+ /** @type {Processor['attachers'][number]|undefined} */
+ let entry;
+
+ while (++index < attachers.length) {
+ if (attachers[index][0] === plugin) {
+ entry = attachers[index];
+ break
+ }
+ }
if (entry) {
- if (plain(entry[1]) && plain(value)) {
- value = extend$1(true, entry[1], value);
+ if (isPlainObject$1(entry[1]) && isPlainObject$1(value)) {
+ value = extend(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]
+ // @ts-expect-error: fine.
+ attachers.push([...arguments]);
}
}
}
- // Parse a file (in string or vfile representation) into a unist node using
- // the `Parser` on the processor.
+ /** @type {Processor['parse']} */
function parse(doc) {
- var file = vfile(doc);
- var Parser;
-
- freeze();
- Parser = processor.Parser;
+ processor.freeze();
+ const file = vfile(doc);
+ const Parser = processor.Parser;
assertParser('parse', Parser);
if (newable(Parser, 'parse')) {
+ // @ts-expect-error: `newable` checks this.
return new Parser(String(file), file).parse()
}
+ // @ts-expect-error: `newable` checks this.
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) {
+ /** @type {Processor['stringify']} */
+ function stringify(node, doc) {
+ processor.freeze();
+ const file = vfile(doc);
+ const Compiler = processor.Compiler;
+ assertCompiler('stringify', Compiler);
+ assertNode(node);
+
+ if (newable(Compiler, 'compile')) {
+ // @ts-expect-error: `newable` checks this.
+ return new Compiler(node, file).compile()
+ }
+
+ // @ts-expect-error: `newable` checks this.
+ return Compiler(node, file) // eslint-disable-line new-cap
+ }
+
+ /**
+ * @param {Node} node
+ * @param {VFileCompatible|RunCallback} [doc]
+ * @param {RunCallback} [callback]
+ * @returns {Promise<Node>|void}
+ */
+ function run(node, doc, callback) {
assertNode(node);
- freeze();
+ processor.freeze();
- if (!cb && typeof file === 'function') {
- cb = file;
- file = null;
+ if (!callback && typeof doc === 'function') {
+ callback = doc;
+ doc = undefined;
}
- if (!cb) {
+ if (!callback) {
return new Promise(executor)
}
- executor(null, cb);
+ executor(null, callback);
+ /**
+ * @param {null|((node: Node) => void)} resolve
+ * @param {(error: Error) => void} reject
+ * @returns {void}
+ */
function executor(resolve, reject) {
- transformers.run(node, vfile(file), done);
+ // @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) {
@@ -28342,97 +33505,119 @@ function unified$1() {
} else if (resolve) {
resolve(tree);
} else {
- cb(null, tree, file);
+ // @ts-expect-error: `callback` is defined if `resolve` is not.
+ callback(null, tree, file);
}
}
}
}
- // Run transforms on a unist node representation of a file (in string or
- // vfile representation), sync.
+ /** @type {Processor['runSync']} */
function runSync(node, file) {
- var result;
- var complete;
+ /** @type {Node|undefined} */
+ let result;
+ /** @type {boolean|undefined} */
+ let complete;
- run(node, file, done);
+ 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) {
- complete = true;
- result = tree;
bail(error);
+ result = tree;
+ complete = true;
}
}
- // 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();
+ /**
+ * @param {VFileCompatible} doc
+ * @param {ProcessCallback} [callback]
+ * @returns {Promise<VFile>|undefined}
+ */
+ function process(doc, callback) {
+ processor.freeze();
assertParser('process', processor.Parser);
assertCompiler('process', processor.Compiler);
- if (!cb) {
+ if (!callback) {
return new Promise(executor)
}
- executor(null, cb);
+ executor(null, callback);
+ /**
+ * @param {null|((file: VFile) => void)} resolve
+ * @param {(error?: Error|null|undefined) => void} reject
+ * @returns {void}
+ */
function executor(resolve, reject) {
- var file = vfile(doc);
+ const file = vfile(doc);
- pipeline.run(processor, {file: file}, done);
+ processor.run(processor.parse(file), file, (error, tree, file) => {
+ if (error || !tree || !file) {
+ done(error);
+ } else {
+ /** @type {unknown} */
+ const result = processor.stringify(tree, file);
- function done(error) {
- if (error) {
+ 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 {
- cb(null, file);
+ // @ts-expect-error: `callback` is defined if `resolve` is not.
+ callback(null, file);
}
}
}
}
- // Process the given document (in string or vfile representation), sync.
+ /** @type {Processor['processSync']} */
function processSync(doc) {
- var file;
- var complete;
+ /** @type {boolean|undefined} */
+ let complete;
- freeze();
+ processor.freeze();
assertParser('processSync', processor.Parser);
assertCompiler('processSync', processor.Compiler);
- file = vfile(doc);
- process(file, done);
+ 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);
@@ -28440,61 +33625,112 @@ function unified$1() {
}
}
-// Check if `value` is a constructor.
+/**
+ * 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)
)
}
-// Check if `value` is an object with keys.
+/**
+ * Check if `value` is an object with keys.
+ *
+ * @param {Record<string, unknown>} value
+ * @returns {boolean}
+ */
function keys(value) {
- var key;
+ /** @type {string} */
+ let key;
+
for (key in value) {
- return true
+ if (own$6.call(value, key)) {
+ 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 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`')
}
}
-// Assert a compiler is available.
-function assertCompiler(name, Compiler) {
- if (typeof Compiler !== 'function') {
- throw new Error('Cannot `' + name + '` without `Compiler`')
+/**
+ * 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`')
}
}
-// Assert the processor is not frozen.
+/**
+ * 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 invoke `' +
+ 'Cannot call `' +
name +
- '` on a frozen processor.\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`.'
+ '` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'
)
}
}
-// Assert `node` is a unist node.
+/**
+ * Assert `node` is a unist node.
+ *
+ * @param {unknown} node
+ * @returns {asserts node is Node}
+ */
function assertNode(node) {
- if (!node || typeof node.type !== 'string') {
- throw new Error('Expected node, got `' + 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.
}
}
-// Assert that `complete` is `true`.
+/**
+ * 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(
@@ -28503,120 +33739,516 @@ function assertDone(name, asyncName, complete) {
}
}
-var mdastUtilToString$1 = toString$5;
+/**
+ * @param {VFileCompatible} [value]
+ * @returns {VFile}
+ */
+function vfile(value) {
+ return looksLikeAVFile(value) ? value : new VFile(value)
+}
+
+/**
+ * @param {VFileCompatible} [value]
+ * @returns {value is VFile}
+ */
+function looksLikeAVFile(value) {
+ return Boolean(
+ value &&
+ typeof value === 'object' &&
+ 'message' in value &&
+ 'messages' in value
+ )
+}
+
+/**
+ * @param {unknown} [value]
+ * @returns {value is VFileValue}
+ */
+function looksLikeAVFileValue(value) {
+ return typeof value === 'string' || isBuffer(value)
+}
+
+/**
+ * @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.
-function toString$5(node) {
+/**
+ * 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)
+}
+
+/**
+ * @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 ||
- node.alt ||
- node.title ||
- ('children' in node && all$2(node.children)) ||
- ('length' in node && all$2(node)))) ||
+ // @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 all$2(values) {
+/**
+ * @param {Array.<unknown>} values
+ * @param {boolean} includeImageAlt
+ * @returns {string}
+ */
+function all(values, includeImageAlt) {
+ /** @type {Array.<string>} */
var result = [];
var index = -1;
while (++index < values.length) {
- result[index] = toString$5(values[index]);
+ result[index] = one(values[index], includeImageAlt);
}
return result.join('')
}
-var assign$5 = Object.assign;
+/**
+ * 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[]} */
-var assign_1 = assign$5;
+ let parameters; // Make start between zero and `end` (included).
-var own$a = {}.hasOwnProperty;
+ if (start < 0) {
+ start = -start > end ? 0 : end + start;
+ } else {
+ start = start > end ? end : start;
+ }
-var hasOwnProperty$2 = own$a;
+ remove = remove > 0 ? remove : 0; // No need to chunk the items if there’s only a couple (10k) items.
-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()
- )
+ 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.
+
+ 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[]}
+ */
-var normalizeIdentifier_1 = normalizeIdentifier$4;
+function push(list, items) {
+ if (list.length > 0) {
+ splice(list, list.length, 0, items);
+ return list
+ }
-var fromCharCode$4 = String.fromCharCode;
+ return items
+}
-var fromCharCode_1 = fromCharCode$4;
+/**
+ * @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
+ */
-var fromCharCode$3 = fromCharCode_1;
+const hasOwnProperty = {}.hasOwnProperty;
-function safeFromInt$1(value, base) {
- var code = parseInt(value, base);
+/**
+ * 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;
- 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'
+ while (++index < extensions.length) {
+ syntaxExtension(all, extensions[index]);
}
- return fromCharCode$3(code)
+ return all
}
-var safeFromInt_1 = safeFromInt$1;
+/**
+ * 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;
-var content$3 = {};
+ 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 markdownLineEnding$k(code) {
- return code < -2
+ 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] : []
+ );
+ }
+ }
}
-var markdownLineEnding_1 = markdownLineEnding$k;
+/**
+ * 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 = [];
+
+ while (++index < list.length) {
+(list[index].add === 'after' ? existing : before).push(list[index]);
+ }
+
+ splice(existing, 0, 0, before);
+}
+
+/**
+ * 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;
-function markdownSpace$a(code) {
+ while (++index < htmlExtensions.length) {
+ htmlExtension(handlers, htmlExtensions[index]);
+ }
+
+ return handlers
+}
+
+/**
+ * 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;
+
+ 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]/;
+
+/**
+ * @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`).
+ */
+
+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`).
+ */
+
+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`).
+ */
+
+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`).
+ */
+
+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 (`~`).
+ */
+
+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.
+ */
+
+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}
+ */
+
+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 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}
+ */
+
+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 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.
+ */
-var markdownSpace_1 = markdownSpace$a;
+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.
-var markdownSpace$9 = markdownSpace_1;
+const unicodePunctuation = regexCheck(unicodePunctuationRegex);
+/**
+ * Create a code check from a regex.
+ *
+ * @param {RegExp} regex
+ * @returns {(code: Code) => code is number}
+ */
+
+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 spaceFactory(effects, ok, type, max) {
- var limit = max ? max - 1 : Infinity;
- var size = 0;
+ function check(code) {
+ return code !== null && regex.test(String.fromCharCode(code))
+ }
+}
+
+/**
+ * @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 factorySpace(effects, ok, type, max) {
+ const limit = max ? max - 1 : Number.POSITIVE_INFINITY;
+ let size = 0;
return start
+ /** @type {State} */
function start(code) {
- if (markdownSpace$9(code)) {
+ if (markdownSpace(code)) {
effects.enter(type);
return prefix(code)
}
return ok(code)
}
+ /** @type {State} */
function prefix(code) {
- if (markdownSpace$9(code) && size++ < limit) {
+ if (markdownSpace(code) && size++ < limit) {
effects.consume(code);
return prefix
}
@@ -28626,23 +34258,30 @@ function spaceFactory(effects, ok, type, max) {
}
}
-var factorySpace$i = spaceFactory;
-
-Object.defineProperty(content$3, '__esModule', {value: true});
-
-var markdownLineEnding$j = markdownLineEnding_1;
-var factorySpace$h = factorySpace$i;
+/**
+ * @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
+ */
-var tokenize$2 = initializeContent;
+/** @type {InitialConstruct} */
+const content$1 = {
+ tokenize: initializeContent
+};
+/** @type {Initializer} */
function initializeContent(effects) {
- var contentStart = effects.attempt(
+ const contentStart = effects.attempt(
this.parser.constructs.contentInitial,
afterContentStartConstruct,
paragraphInitial
);
- var previous;
+ /** @type {Token} */
+
+ let previous;
return contentStart
+ /** @type {State} */
function afterContentStartConstruct(code) {
if (code === null) {
@@ -28653,18 +34292,20 @@ function initializeContent(effects) {
effects.enter('lineEnding');
effects.consume(code);
effects.exit('lineEnding');
- return factorySpace$h(effects, contentStart, 'linePrefix')
+ return factorySpace(effects, contentStart, 'linePrefix')
}
+ /** @type {State} */
function paragraphInitial(code) {
effects.enter('paragraph');
return lineStart(code)
}
+ /** @type {State} */
function lineStart(code) {
- var token = effects.enter('chunkText', {
+ const token = effects.enter('chunkText', {
contentType: 'text',
- previous: previous
+ previous
});
if (previous) {
@@ -28674,6 +34315,7 @@ function initializeContent(effects) {
previous = token;
return data(code)
}
+ /** @type {State} */
function data(code) {
if (code === null) {
@@ -28683,7 +34325,7 @@ function initializeContent(effects) {
return
}
- if (markdownLineEnding$j(code)) {
+ if (markdownLineEnding(code)) {
effects.consume(code);
effects.exit('chunkText');
return lineStart
@@ -28694,84 +34336,128 @@ function initializeContent(effects) {
}
}
-content$3.tokenize = tokenize$2;
-
-var document$3 = {};
-
-var markdownLineEnding$i = markdownLineEnding_1;
-var factorySpace$g = factorySpace$i;
+/**
+ * @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} */
-var partialBlankLine$4 = {
- tokenize: tokenizePartialBlankLine,
- partial: true
+const document$2 = {
+ tokenize: initializeDocument
};
+/** @type {Construct} */
-function tokenizePartialBlankLine(effects, ok, nok) {
- return factorySpace$g(effects, afterWhitespace, 'linePrefix')
-
- function afterWhitespace(code) {
- return code === null || markdownLineEnding$i(code) ? ok(code) : nok(code)
- }
-}
+const containerConstruct = {
+ tokenize: tokenizeContainer
+};
+/** @type {Initializer} */
-var partialBlankLine_1 = partialBlankLine$4;
+function initializeDocument(effects) {
+ const self = this;
+ /** @type {StackItem[]} */
-Object.defineProperty(document$3, '__esModule', {value: true});
+ const stack = [];
+ let continued = 0;
+ /** @type {TokenizeContext|undefined} */
-var markdownLineEnding$h = markdownLineEnding_1;
-var factorySpace$f = factorySpace$i;
-var partialBlankLine$3 = partialBlankLine_1;
+ let childFlow;
+ /** @type {Token|undefined} */
-var tokenize$1 = initializeDocument;
-var containerConstruct = {
- tokenize: tokenizeContainer
-};
-var lazyFlowConstruct = {
- tokenize: tokenizeLazyFlow
-};
+ let childToken;
+ /** @type {number} */
-function initializeDocument(effects) {
- var self = this;
- var stack = [];
- var continued = 0;
- var inspectConstruct = {
- tokenize: tokenizeInspect,
- partial: true
- };
- var inspectResult;
- var childFlow;
- var childToken;
+ let lineStartOffset;
return start
+ /** @type {State} */
function start(code) {
+ // 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) {
- self.containerState = stack[continued][1];
+ const item = stack[continued];
+ self.containerState = item[1];
return effects.attempt(
- stack[continued][0].continuation,
+ item[0].continuation,
documentContinue,
- documentContinued
+ checkNewContainers
)(code)
- }
+ } // Done.
- return documentContinued(code)
+ return checkNewContainers(code)
}
+ /** @type {State} */
function documentContinue(code) {
+ if (self.containerState._closeFlow) closeFlow();
continued++;
return start(code)
}
+ /** @type {State} */
- 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)
- }
+ 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 (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.
+
+ self.interrupt = Boolean(childFlow.currentConstruct);
+ } // Check if there is a new container.
+
+ self.containerState = {};
+ return effects.check(
+ containerConstruct,
+ thereIsANewContainer,
+ thereIsNoNewContainer
+ )(code)
+ }
+ /** @type {State} */
- self.interrupt =
- childFlow &&
- childFlow.currentConstruct &&
- childFlow.currentConstruct.interruptible;
+ function thereIsANewContainer(code) {
+ if (childFlow) closeFlow();
+ exitContainers(continued);
+ return documentContinued(code)
+ }
+ /** @type {State} */
+
+ function thereIsNoNewContainer(code) {
+ self.parser.lazy[self.now().line] = continued !== stack.length;
+ lineStartOffset = self.now().offset;
+ return flowStart(code)
+ }
+ /** @type {State} */
+
+ function documentContinued(code) {
+ // Try new containers.
self.containerState = {};
return effects.attempt(
containerConstruct,
@@ -28779,16 +34465,20 @@ function initializeDocument(effects) {
flowStart
)(code)
}
+ /** @type {State} */
function containerContinue(code) {
- stack.push([self.currentConstruct, self.containerState]);
- self.containerState = undefined;
+ continued++;
+ stack.push([self.currentConstruct, self.containerState]); // Try another.
+
return documentContinued(code)
}
+ /** @type {State} */
function flowStart(code) {
if (code === null) {
- exitContainers(0, true);
+ if (childFlow) closeFlow();
+ exitContainers(0);
effects.consume(code);
return
}
@@ -28801,870 +34491,221 @@ function initializeDocument(effects) {
});
return flowContinue(code)
}
+ /** @type {State} */
function flowContinue(code) {
if (code === null) {
- continueFlow(effects.exit('chunkFlow'));
- return flowStart(code)
+ writeToChild(effects.exit('chunkFlow'), true);
+ exitContainers(0);
+ effects.consume(code);
+ return
}
- if (markdownLineEnding$h(code)) {
+ if (markdownLineEnding(code)) {
effects.consume(code);
- continueFlow(effects.exit('chunkFlow'));
- return effects.check(inspectConstruct, documentAfterPeek)
+ writeToChild(effects.exit('chunkFlow')); // Get ready for the next line.
+
+ continued = 0;
+ self.interrupt = undefined;
+ return start
}
effects.consume(code);
return flowContinue
}
+ /**
+ * @param {Token} token
+ * @param {boolean} [eof]
+ * @returns {void}
+ */
- function documentAfterPeek(code) {
- exitContainers(
- inspectResult.continued,
- inspectResult && inspectResult.flowEnd
- );
- continued = 0;
- return start(code)
- }
-
- function continueFlow(token) {
+ 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.lazy = inspectResult && inspectResult.lazy;
childFlow.defineSkip(token.start);
- childFlow.write(self.sliceStream(token));
- }
-
- function exitContainers(size, end) {
- var index = stack.length; // Close the flow.
-
- if (childFlow && end) {
- childFlow.write([null]);
- childToken = childFlow = undefined;
- } // Exit open containers.
-
- while (index-- > size) {
- self.containerState = stack[index][1];
- stack[index][0].exit.call(self, effects);
- }
-
- stack.length = size;
- }
-
- 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.
-
- return inspectFlowEnd(code)
- }
-
- 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.
-
- function inspectFlowEnd(code) {
- inspectResult.flowEnd = true;
- return inspectDone(code)
- }
-
- function inspectDone(code) {
- inspectResult.continued = subcontinued;
- self.interrupt = self.containerState = undefined;
- return ok(code)
- }
- }
-}
-
-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
- )
-}
-
-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
- )
-}
-
-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
-}
-
-var sizeChunks_1 = sizeChunks$2;
-
-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]))
-}
-
-var prefixSize_1 = prefixSize$4;
-
-var splice$2 = [].splice;
-
-var splice_1 = splice$2;
-
-var splice$1 = splice_1;
-
-// causes a stack overflow in V8 when trying to insert 100k items for instance.
-
-function chunkedSplice$8(list, start, remove, items) {
- var end = list.length;
- var chunkStart = 0;
- var parameters; // Make start between zero and `end` (included).
-
- if (start < 0) {
- start = -start > end ? 0 : end + start;
- } else {
- start = start > end ? end : start;
- }
-
- remove = remove > 0 ? remove : 0; // No need to chunk the items if there’s only a couple (10k) items.
-
- 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.
-
- while (chunkStart < items.length) {
- parameters = items.slice(chunkStart, chunkStart + 10000);
- parameters.unshift(start, 0);
- splice$1.apply(list, parameters);
- chunkStart += 10000;
- start += 10000;
- }
- }
-}
-
-var chunkedSplice_1 = chunkedSplice$8;
-
-var assign$4 = assign_1;
-
-function shallow$6(object) {
- return assign$4({}, object)
-}
-
-var shallow_1 = shallow$6;
-
-var assign$3 = assign_1;
-var chunkedSplice$7 = chunkedSplice_1;
-var shallow$5 = shallow_1;
-
-function subtokenize$2(events) {
- var jumps = {};
- var index = -1;
- var event;
- var lineIndex;
- var otherIndex;
- var otherEvent;
- var parameters;
- var subevents;
- var 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 (
- otherIndex < subevents.length &&
- subevents[otherIndex][1].type === 'content'
- ) {
- while (++otherIndex < subevents.length) {
- if (subevents[otherIndex][1].type === 'content') {
- break
- }
-
- if (subevents[otherIndex][1].type === 'chunkText') {
- subevents[otherIndex][1].isInFirstContentOfListItem = true;
- otherIndex++;
- }
- }
- }
- } // 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;
+ 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.
- while (otherIndex--) {
- otherEvent = events[otherIndex];
+ if (self.parser.lazy[token.start.line]) {
+ let index = childFlow.events.length;
+ while (index--) {
if (
- otherEvent[1].type === 'lineEnding' ||
- otherEvent[1].type === 'lineEndingBlank'
+ // 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)
) {
- if (otherEvent[0] === 'enter') {
- if (lineIndex) {
- events[lineIndex][1].type = 'lineEndingBlank';
- }
-
- otherEvent[1].type = 'lineEnding';
- lineIndex = otherIndex;
- }
- } else {
- break
+ // Exit: there’s still something open, which means it’s a lazy line
+ // part of something.
+ 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);
- }
- }
- }
-
- return !more
-}
-
-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.
-
- while (token) {
- // Find the position of the event for this token.
- while (events[++startPosition][1] !== token) {
- // Empty.
- }
-
- startPositions.push(startPosition);
+ const indexBeforeExits = self.events.length;
+ let indexBeforeFlow = indexBeforeExits;
+ /** @type {boolean|undefined} */
- if (!token._tokenizer) {
- stream = context.sliceStream(token);
+ let seen;
+ /** @type {Point|undefined} */
- if (!token.next) {
- stream.push(null);
- }
-
- if (previous) {
- tokenizer.defineSkip(token.start);
- }
+ let point; // Find the previous chunk (the one before the lazy line).
- if (token.isInFirstContentOfListItem) {
- tokenizer._gfmTasklistFirstContentOfListItem = true;
- }
-
- tokenizer.write(stream);
-
- if (token.isInFirstContentOfListItem) {
- tokenizer._gfmTasklistFirstContentOfListItem = undefined;
- }
- } // Unravel the next token.
-
- previous = token;
- token = token.next;
- } // Now, loop back through all events (and linked tokens), to figure out which
- // parts belong where.
-
- token = previous;
- index = childEvents.length;
-
- 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;
- }
- }
-
- // Help GC.
- tokenizer.events = token._tokenizer = token.next = undefined; // Do head:
-
- add(childEvents.slice(0, end));
- index = -1;
- adjust = 0;
-
- while (++index < jumps.length) {
- gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];
- adjust += jumps[index][1] - jumps[index][0] - 1;
- }
-
- return gaps
-
- function add(slice) {
- var start = startPositions.pop();
- jumps.unshift([start, start + slice.length - 1]);
- chunkedSplice$7(events, start, 2, slice);
- }
-}
-
-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$2 = {
- tokenize: tokenizeContent,
- resolve: resolveContent,
- interruptible: true,
- lazy: true
-};
-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 tokenizeContent(effects, ok) {
- var previous;
- return start
-
- function start(code) {
- effects.enter('content');
- previous = effects.enter('chunkContent', {
- contentType: 'content'
- });
- return data(code)
- }
-
- function data(code) {
- if (code === null) {
- return contentEnd(code)
- }
-
- if (markdownLineEnding$g(code)) {
- return effects.check(
- continuationConstruct,
- contentContinue,
- contentEnd
- )(code)
- } // Data.
-
- 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')
- }
-
- function prefixed(code) {
- if (code === null || markdownLineEnding$g(code)) {
- return nok(code)
- }
-
- 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)
- }
-
- 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 atBlankEnding(code) {
- if (code === null) {
- effects.consume(code);
- return
- }
-
- effects.enter('lineEndingBlank');
- effects.consume(code);
- effects.exit('lineEndingBlank');
- self.currentConstruct = undefined;
- return initial
- }
-
- function afterConstruct(code) {
- if (code === null) {
- effects.consume(code);
- return
- }
-
- effects.enter('lineEnding');
- effects.consume(code);
- effects.exit('lineEnding');
- self.currentConstruct = undefined;
- return initial
- }
-}
-
-flow$7.tokenize = tokenize;
-
-var text$5 = {};
-
-Object.defineProperty(text$5, '__esModule', {value: true});
-
-var assign$2 = assign_1;
-var shallow$4 = shallow_1;
-
-var text$4 = initializeFactory('text');
-var string$1 = initializeFactory('string');
-var resolver = {
- resolveAll: createResolver()
-};
-
-function initializeFactory(field) {
- return {
- tokenize: initializeText,
- resolveAll: createResolver(
- field === 'text' ? resolveAllLineSuffixes : undefined
- )
- }
-
- function initializeText(effects) {
- var self = this;
- var constructs = this.parser.constructs[field];
- var text = effects.attempt(constructs, start, notText);
- return start
-
- function start(code) {
- return atBreak(code) ? text(code) : notText(code)
- }
-
- function notText(code) {
- if (code === null) {
- effects.consume(code);
- return
- }
-
- effects.enter('data');
- effects.consume(code);
- return data
- }
-
- function data(code) {
- if (atBreak(code)) {
- effects.exit('data');
- return text(code)
- } // Data.
-
- effects.consume(code);
- return data
- }
-
- function atBreak(code) {
- var list = constructs[code];
- var index = -1;
-
- if (code === null) {
- return true
- }
-
- if (list) {
- while (++index < list.length) {
- if (
- !list[index].previous ||
- list[index].previous.call(self, self.previous)
- ) {
- return true
+ while (indexBeforeFlow--) {
+ if (
+ self.events[indexBeforeFlow][0] === 'exit' &&
+ self.events[indexBeforeFlow][1].type === 'chunkFlow'
+ ) {
+ if (seen) {
+ point = self.events[indexBeforeFlow][1].end;
+ break
}
- }
- }
- }
- }
-}
-function createResolver(extraResolver) {
- return resolveAllText
-
- function resolveAllText(events, context) {
- var index = -1;
- var enter; // A rather boring computation (to merge adjacent `data` events) which
- // improves mm performance by 29%.
-
- while (++index <= events.length) {
- if (enter === undefined) {
- if (events[index] && events[index][1].type === 'data') {
- enter = index;
- index++;
+ seen = true;
}
- } 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;
- }
-
- enter = undefined;
}
- }
- 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?)
-
-function resolveAllLineSuffixes(events, context) {
- var eventIndex = -1;
- var chunks;
- var data;
- var chunk;
- var index;
- var bufferIndex;
- var size;
- var tabs;
- var token;
-
- 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;
-
- while (index--) {
- chunk = chunks[index];
-
- if (typeof chunk === 'string') {
- bufferIndex = chunk.length;
+ exitContainers(continued); // Fix positions.
- 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
- }
- }
+ index = indexBeforeExits;
- 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);
+ 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).
- if (data.start.offset === data.end.offset) {
- assign$2(data, token);
- } else {
- events.splice(
- eventIndex,
- 0,
- ['enter', token, context],
- ['exit', token, context]
- );
- eventIndex += 2;
- }
- }
+ splice(
+ self.events,
+ indexBeforeFlow + 1,
+ 0,
+ self.events.slice(indexBeforeExits)
+ ); // Discard the duplicate exits.
- eventIndex++;
+ self.events.length = index;
}
}
+ /**
+ * @param {number} size
+ * @returns {void}
+ */
- return events
-}
-
-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 hasOwnProperty$1 = hasOwnProperty$2;
-var chunkedSplice$6 = chunkedSplice_1;
-var miniflat$2 = miniflat_1;
+ function exitContainers(size) {
+ let index = stack.length; // Exit open containers.
-function combineExtensions$2(extensions) {
- var all = {};
- var index = -1;
+ while (index-- > size) {
+ const entry = stack[index];
+ self.containerState = entry[1];
+ entry[0].exit.call(self, effects);
+ }
- while (++index < extensions.length) {
- extension$1(all, extensions[index]);
+ stack.length = size;
}
- return all
-}
-
-function extension$1(all, extension) {
- var hook;
- var left;
- var right;
- var code;
-
- for (hook in extension) {
- left = hasOwnProperty$1.call(all, hook) ? all[hook] : (all[hook] = {});
- right = extension[hook];
-
- for (code in right) {
- left[code] = constructs$3(
- miniflat$2(right[code]),
- hasOwnProperty$1.call(left, code) ? left[code] : []
- );
- }
+ function closeFlow() {
+ childFlow.write([null]);
+ childToken = undefined;
+ childFlow = undefined;
+ self.containerState._closeFlow = undefined;
}
}
+/** @type {Tokenizer} */
-function constructs$3(list, existing) {
- var index = -1;
- var before = [];
-
- while (++index < list.length) {
-(list[index].add === 'after' ? existing : before).push(list[index]);
- }
-
- chunkedSplice$6(existing, 0, 0, before);
- return existing
+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
+ )
}
-var combineExtensions_1 = combineExtensions$2;
-
-var chunkedSplice$5 = chunkedSplice_1;
+/**
+ * @typedef {import('micromark-util-types').Code} Code
+ */
-function chunkedPush$3(list, items) {
- if (list.length) {
- chunkedSplice$5(list, list.length, 0, items);
- return list
+/**
+ * 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
}
- return items
+ if (unicodePunctuation(code)) {
+ return 2
+ }
}
-var chunkedPush_1 = chunkedPush$3;
+/**
+ * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext
+ * @typedef {import('micromark-util-types').Event} Event
+ * @typedef {import('micromark-util-types').Resolver} Resolver
+ */
-function resolveAll$4(constructs, events, context) {
- var called = [];
- var index = -1;
- var resolve;
+/**
+ * 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;
while (++index < constructs.length) {
- resolve = constructs[index].resolveAll;
+ const resolve = constructs[index].resolveAll;
- if (resolve && called.indexOf(resolve) < 0) {
+ if (resolve && !called.includes(resolve)) {
events = resolve(events, context);
called.push(resolve);
}
@@ -29673,491 +34714,55 @@ function resolveAll$4(constructs, events, context) {
return events
}
-var resolveAll_1 = resolveAll$4;
-
-var fromCharCode$2 = fromCharCode_1;
-
-function serializeChunks$1(chunks) {
- var index = -1;
- var result = [];
- var chunk;
- var value;
- var atTab;
-
- while (++index < chunks.length) {
- chunk = chunks[index];
-
- 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);
- }
-
- atTab = chunk === -2;
- result.push(value);
- }
-
- return result.join('')
-}
-
-var serializeChunks_1 = serializeChunks$1;
-
-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;
-
- if (startIndex === endIndex) {
- view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];
- } else {
- view = chunks.slice(startIndex, endIndex);
-
- if (startBufferIndex > -1) {
- view[0] = view[0].slice(startBufferIndex);
- }
-
- if (endBufferIndex > 0) {
- view.push(chunks[endIndex].slice(0, endBufferIndex));
- }
- }
-
- return view
-}
-
-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.
-
- var context = {
- previous: null,
- events: [],
- parser: parser,
- sliceStream: sliceStream,
- sliceSerialize: sliceSerialize,
- now: now,
- defineSkip: skip,
- write: write
- }; // The state function.
-
- var state = initialize.tokenize.call(context, effects); // Track which character we expect to be consumed, to catch bugs.
-
- if (initialize.resolveAll) {
- resolveAllConstructs.push(initialize);
- } // Store where we are in the input stream.
-
- point._index = 0;
- point._bufferIndex = -1;
- return context
-
- function write(slice) {
- chunks = chunkedPush$2(chunks, slice);
- main(); // Exit if we’re not done, resolve might change stuff.
-
- if (chunks[chunks.length - 1] !== null) {
- return []
- }
-
- addResult(initialize, 0); // Otherwise, resolve, and exit.
-
- context.events = resolveAll$3(resolveAllConstructs, context.events, context);
- return context.events
- } //
- // Tools.
- //
-
- function sliceSerialize(token) {
- return serializeChunks(sliceStream(token))
- }
-
- function sliceStream(token) {
- return sliceChunks(chunks, token)
- }
-
- function now() {
- return shallow$3(point)
- }
-
- 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.
-
- function main() {
- var chunkIndex;
- var chunk;
-
- while (point._index < chunks.length) {
- chunk = chunks[point._index]; // If we’re in a buffer chunk, loop through it.
-
- if (typeof chunk === 'string') {
- chunkIndex = point._index;
-
- if (point._bufferIndex < 0) {
- point._bufferIndex = 0;
- }
-
- while (
- point._index === chunkIndex &&
- point._bufferIndex < chunk.length
- ) {
- go(chunk.charCodeAt(point._bufferIndex));
- }
- } else {
- go(chunk);
- }
- }
- } // Deal with one code.
-
- function go(code) {
- state = state(code);
- } // Move a character forward.
-
- 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.
-
- if (point._bufferIndex < 0) {
- point._index++;
- } else {
- point._bufferIndex++; // At end of string chunk.
-
- if (point._bufferIndex === chunks[point._index].length) {
- point._bufferIndex = -1;
- point._index++;
- }
- } // Expose the previous character.
-
- context.previous = code; // Mark as consumed.
- } // Start a token.
-
- 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.
-
- function exit(type) {
- var token = stack.pop();
- token.end = now();
- context.events.push(['exit', token, context]);
- return token
- } // Use results.
-
- function onsuccessfulconstruct(construct, info) {
- addResult(construct, info.from);
- } // Discard results.
-
- function onsuccessfulcheck(construct, info) {
- info.restore();
- } // Factory to attempt/check/interrupt.
-
- function constructFactory(onreturn, fields) {
- return hook // Handle either an object mapping codes to constructs, a list of
- // constructs, or a single construct.
-
- 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)
- }
-
- return bogusState(code)
- }
-
- function handleListOfConstructs(list) {
- listOfConstructs = list;
- constructIndex = 0;
- return handleConstruct(list[constructIndex])
- }
-
- function handleConstruct(construct) {
- return start
-
- 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;
-
- if (!construct.partial) {
- context.currentConstruct = construct;
- }
-
- if (
- construct.name &&
- context.parser.constructs.disable.null.indexOf(construct.name) > -1
- ) {
- return nok()
- }
-
- return construct.tokenize.call(
- fields ? assign$1({}, context, fields) : context,
- effects,
- ok,
- nok
- )(code)
- }
- }
-
- function ok(code) {
- onreturn(currentConstruct, info);
- return returnState
- }
-
- function nok(code) {
- info.restore();
-
- if (++constructIndex < listOfConstructs.length) {
- return handleConstruct(listOfConstructs[constructIndex])
- }
-
- return bogusState
- }
- }
- }
-
- function addResult(construct, from) {
- if (construct.resolveAll && resolveAllConstructs.indexOf(construct) < 0) {
- resolveAllConstructs.push(construct);
- }
-
- if (construct.resolve) {
- chunkedSplice$4(
- context.events,
- from,
- context.events.length - from,
- construct.resolve(context.events.slice(from), context)
- );
- }
-
- if (construct.resolveTo) {
- context.events = construct.resolveTo(context.events, context);
- }
- }
-
- function store() {
- var startPoint = now();
- var startPrevious = context.previous;
- var startCurrentConstruct = context.currentConstruct;
- var startEventsIndex = context.events.length;
- var startStack = Array.from(stack);
- return {
- restore: restore,
- from: startEventsIndex
- }
-
- function restore() {
- point = startPoint;
- context.previous = startPrevious;
- context.currentConstruct = startCurrentConstruct;
- context.events.length = startEventsIndex;
- stack = startStack;
- accountForPotentialSkip();
- }
- }
-
- function accountForPotentialSkip() {
- if (point.line in columnStart && point.column < 2) {
- point.column = columnStart[point.line];
- point.offset += columnStart[point.line] - 1;
- }
- }
-}
-
-var createTokenizer_1 = createTokenizer$1;
-
-var constructs$2 = {};
-
-function markdownLineEndingOrSpace$9(code) {
- return code < 0 || code === 32
-}
-
-var markdownLineEndingOrSpace_1 = markdownLineEndingOrSpace$9;
-
-// 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]/;
-
-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 regexCheck_1 = regexCheck$9;
-
-var unicodePunctuationRegex$1 = unicodePunctuationRegex$2;
-var regexCheck$8 = regexCheck_1;
-
-// In fact adds to the bundle size.
-
-var unicodePunctuation$2 = regexCheck$8(unicodePunctuationRegex$1);
-
-var unicodePunctuation_1 = unicodePunctuation$2;
-
-var regexCheck$7 = regexCheck_1;
-
-var unicodeWhitespace$2 = regexCheck$7(/\s/);
-
-var unicodeWhitespace_1 = unicodeWhitespace$2;
+/**
+ * @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
+ */
-var markdownLineEndingOrSpace$8 = markdownLineEndingOrSpace_1;
-var unicodePunctuation$1 = unicodePunctuation_1;
-var unicodeWhitespace$1 = unicodeWhitespace_1;
+/** @type {Construct} */
+const attention = {
+ name: 'attention',
+ tokenize: tokenizeAttention,
+ resolveAll: resolveAllAttention
+};
+/**
+ * Take all events and resolve attention to emphasis or strong.
+ *
+ * @type {Resolver}
+ */
-// 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
- }
+function resolveAllAttention(events, context) {
+ let index = -1;
+ /** @type {number} */
- if (unicodePunctuation$1(code)) {
- return 2
- }
-}
+ let open;
+ /** @type {Token} */
-var classifyCharacter_1 = classifyCharacter$2;
+ let group;
+ /** @type {Token} */
-// chunks (replacement characters, tabs, or line endings).
+ let text;
+ /** @type {Token} */
-function movePoint$1(point, offset) {
- point.column += offset;
- point.offset += offset;
- point._bufferIndex += offset;
- return point
-}
+ let openingSequence;
+ /** @type {Token} */
-var movePoint_1 = movePoint$1;
+ let closingSequence;
+ /** @type {number} */
-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;
+ let use;
+ /** @type {Event[]} */
-var attention$1 = {
- name: 'attention',
- tokenize: tokenizeAttention,
- resolveAll: resolveAllAttention
-};
+ let nextEvents;
+ /** @type {number} */
-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.
+ 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.
@@ -30203,54 +34808,58 @@ function resolveAllAttention(events, context) {
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: movePoint(shallow$2(events[open][1].end), -use),
- end: shallow$2(events[open][1].end)
+ start,
+ end: Object.assign({}, 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)
+ start: Object.assign({}, events[index][1].start),
+ end
};
text = {
type: use > 1 ? 'strongText' : 'emphasisText',
- start: shallow$2(events[open][1].end),
- end: shallow$2(events[index][1].start)
+ start: Object.assign({}, events[open][1].end),
+ end: Object.assign({}, events[index][1].start)
};
group = {
type: use > 1 ? 'strong' : 'emphasis',
- start: shallow$2(openingSequence.start),
- end: shallow$2(closingSequence.end)
+ start: Object.assign({}, openingSequence.start),
+ end: Object.assign({}, closingSequence.end)
};
- events[open][1].end = shallow$2(openingSequence.start);
- events[index][1].start = shallow$2(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 = chunkedPush$1(nextEvents, [
+ nextEvents = push(nextEvents, [
['enter', events[open][1], context],
['exit', events[open][1], context]
]);
} // Opening.
- nextEvents = chunkedPush$1(nextEvents, [
+ nextEvents = push(nextEvents, [
['enter', group, context],
['enter', openingSequence, context],
['exit', openingSequence, context],
['enter', text, context]
]); // Between.
- nextEvents = chunkedPush$1(
+ nextEvents = push(
nextEvents,
- resolveAll$2(
+ resolveAll(
context.parser.constructs.insideSpan.null,
events.slice(open + 1, index),
context
)
); // Closing.
- nextEvents = chunkedPush$1(nextEvents, [
+ nextEvents = push(nextEvents, [
['exit', text, context],
['enter', closingSequence, context],
['exit', closingSequence, context],
@@ -30259,7 +34868,7 @@ function resolveAllAttention(events, context) {
if (events[index][1].end.offset - events[index][1].start.offset) {
offset = 2;
- nextEvents = chunkedPush$1(nextEvents, [
+ nextEvents = push(nextEvents, [
['enter', events[index][1], context],
['exit', events[index][1], context]
]);
@@ -30267,7 +34876,7 @@ function resolveAllAttention(events, context) {
offset = 0;
}
- chunkedSplice$3(events, open - 1, index - open + 3, nextEvents);
+ splice(events, open - 1, index - open + 3, nextEvents);
index = open + nextEvents.length - offset - 2;
break
}
@@ -30285,83 +34894,72 @@ function resolveAllAttention(events, context) {
return events
}
+/** @type {Tokenizer} */
function tokenizeAttention(effects, ok) {
- var before = classifyCharacter$1(this.previous);
- var marker;
+ const before = classifyCharacter(this.previous);
+ /** @type {NonNullable<Code>} */
+
+ let marker;
return start
+ /** @type {State} */
function start(code) {
effects.enter('attentionSequence');
marker = code;
return sequence(code)
}
+ /** @type {State} */
function sequence(code) {
- var token;
- var after;
- var open;
- var close;
-
if (code === marker) {
effects.consume(code);
return sequence
}
- 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);
+ 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}
+ */
-var attention_1 = attention$1;
-
-var regexCheck$6 = regexCheck_1;
-
-var asciiAlpha$4 = regexCheck$6(/[A-Za-z]/);
-
-var asciiAlpha_1 = asciiAlpha$4;
-
-var regexCheck$5 = regexCheck_1;
-
-var asciiAlphanumeric$5 = regexCheck$5(/[\dA-Za-z]/);
-
-var asciiAlphanumeric_1 = asciiAlphanumeric$5;
-
-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$3(code) {
- return (
- // Special whitespace codes (which have negative values), C0 and Control
- // character DEL
- code < 32 || code === 127
- )
+function movePoint(point, offset) {
+ point.column += offset;
+ point.offset += offset;
+ point._bufferIndex += offset;
}
-var asciiControl_1 = asciiControl$3;
-
-var asciiAlpha$3 = asciiAlpha_1;
-var asciiAlphanumeric$4 = asciiAlphanumeric_1;
-var asciiAtext = asciiAtext_1;
-var asciiControl$2 = asciiControl_1;
+/**
+ * @typedef {import('micromark-util-types').Construct} Construct
+ * @typedef {import('micromark-util-types').Tokenizer} Tokenizer
+ * @typedef {import('micromark-util-types').State} State
+ */
-var autolink$1 = {
+/** @type {Construct} */
+const autolink = {
name: 'autolink',
tokenize: tokenizeAutolink
};
+/** @type {Tokenizer} */
function tokenizeAutolink(effects, ok, nok) {
- var size = 1;
+ let size = 1;
return start
+ /** @type {State} */
function start(code) {
effects.enter('autolink');
@@ -30371,21 +34969,24 @@ function tokenizeAutolink(effects, ok, nok) {
effects.enter('autolinkProtocol');
return open
}
+ /** @type {State} */
function open(code) {
- if (asciiAlpha$3(code)) {
+ if (asciiAlpha(code)) {
effects.consume(code);
return schemeOrEmailAtext
}
return asciiAtext(code) ? emailAtext(code) : nok(code)
}
+ /** @type {State} */
function schemeOrEmailAtext(code) {
- return code === 43 || code === 45 || code === 46 || asciiAlphanumeric$4(code)
+ return code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)
? schemeInsideOrEmailAtext(code)
: emailAtext(code)
}
+ /** @type {State} */
function schemeInsideOrEmailAtext(code) {
if (code === 58) {
@@ -30394,7 +34995,7 @@ function tokenizeAutolink(effects, ok, nok) {
}
if (
- (code === 43 || code === 45 || code === 46 || asciiAlphanumeric$4(code)) &&
+ (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&
size++ < 32
) {
effects.consume(code);
@@ -30403,6 +35004,7 @@ function tokenizeAutolink(effects, ok, nok) {
return emailAtext(code)
}
+ /** @type {State} */
function urlInside(code) {
if (code === 62) {
@@ -30410,13 +35012,14 @@ function tokenizeAutolink(effects, ok, nok) {
return end(code)
}
- if (code === 32 || code === 60 || asciiControl$2(code)) {
+ if (code === null || code === 32 || code === 60 || asciiControl(code)) {
return nok(code)
}
effects.consume(code);
return urlInside
}
+ /** @type {State} */
function emailAtext(code) {
if (code === 64) {
@@ -30432,10 +35035,12 @@ function tokenizeAutolink(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function emailAtSignOrDot(code) {
- return asciiAlphanumeric$4(code) ? emailLabel(code) : nok(code)
+ return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)
}
+ /** @type {State} */
function emailLabel(code) {
if (code === 46) {
@@ -30452,15 +35057,17 @@ function tokenizeAutolink(effects, ok, nok) {
return emailValue(code)
}
+ /** @type {State} */
function emailValue(code) {
- if ((code === 45 || asciiAlphanumeric$4(code)) && size++ < 63) {
+ if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {
effects.consume(code);
return code === 45 ? emailValue : emailLabel
}
return nok(code)
}
+ /** @type {State} */
function end(code) {
effects.enter('autolinkMarker');
@@ -30471,12 +35078,37 @@ function tokenizeAutolink(effects, ok, nok) {
}
}
-var autolink_1 = autolink$1;
+/**
+ * @typedef {import('micromark-util-types').Construct} Construct
+ * @typedef {import('micromark-util-types').Tokenizer} Tokenizer
+ * @typedef {import('micromark-util-types').State} State
+ */
+
+/** @type {Construct} */
+const blankLine = {
+ tokenize: tokenizeBlankLine,
+ partial: true
+};
+/** @type {Tokenizer} */
-var markdownSpace$8 = markdownSpace_1;
-var factorySpace$c = factorySpace$i;
+function tokenizeBlankLine(effects, ok, nok) {
+ return factorySpace(effects, afterWhitespace, 'linePrefix')
+ /** @type {State} */
+
+ function afterWhitespace(code) {
+ return code === null || markdownLineEnding(code) ? ok(code) : nok(code)
+ }
+}
-var blockQuote$1 = {
+/**
+ * @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
+ */
+
+/** @type {Construct} */
+const blockQuote = {
name: 'blockQuote',
tokenize: tokenizeBlockQuoteStart,
continuation: {
@@ -30484,18 +35116,22 @@ var blockQuote$1 = {
},
exit: exit$1
};
+/** @type {Tokenizer} */
function tokenizeBlockQuoteStart(effects, ok, nok) {
- var self = this;
+ const self = this;
return start
+ /** @type {State} */
function start(code) {
if (code === 62) {
- if (!self.containerState.open) {
+ const state = self.containerState;
+
+ if (!state.open) {
effects.enter('blockQuote', {
_container: true
});
- self.containerState.open = true;
+ state.open = true;
}
effects.enter('blockQuotePrefix');
@@ -30507,9 +35143,10 @@ function tokenizeBlockQuoteStart(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function after(code) {
- if (markdownSpace$8(code)) {
+ if (markdownSpace(code)) {
effects.enter('blockQuotePrefixWhitespace');
effects.consume(code);
effects.exit('blockQuotePrefixWhitespace');
@@ -30521,39 +35158,38 @@ function tokenizeBlockQuoteStart(effects, ok, nok) {
return ok(code)
}
}
+/** @type {Tokenizer} */
function tokenizeBlockQuoteContinuation(effects, ok, nok) {
- return factorySpace$c(
+ return factorySpace(
effects,
- effects.attempt(blockQuote$1, ok, nok),
+ effects.attempt(blockQuote, ok, nok),
'linePrefix',
- this.parser.constructs.disable.null.indexOf('codeIndented') > -1
- ? undefined
- : 4
+ this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4
)
}
+/** @type {Exiter} */
function exit$1(effects) {
effects.exit('blockQuote');
}
-var blockQuote_1 = blockQuote$1;
-
-var regexCheck$3 = regexCheck_1;
-
-var asciiPunctuation$1 = regexCheck$3(/[!-/:-@[-`{-~]/);
-
-var asciiPunctuation_1 = asciiPunctuation$1;
-
-var asciiPunctuation = asciiPunctuation_1;
+/**
+ * @typedef {import('micromark-util-types').Construct} Construct
+ * @typedef {import('micromark-util-types').Tokenizer} Tokenizer
+ * @typedef {import('micromark-util-types').State} State
+ */
-var characterEscape$2 = {
+/** @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('characterEscape');
@@ -30562,6 +35198,7 @@ function tokenizeCharacterEscape(effects, ok, nok) {
effects.exit('escapeMarker');
return open
}
+ /** @type {State} */
function open(code) {
if (asciiPunctuation(code)) {
@@ -30576,4499 +35213,2269 @@ function tokenizeCharacterEscape(effects, ok, nok) {
}
}
-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
+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 characterEntities$2 = require$$0$2;
-
-var decodeEntity_1$2 = decodeEntity$3;
-
-var own$9 = {}.hasOwnProperty;
+var own$5 = {}.hasOwnProperty;
-function decodeEntity$3(characters) {
- return own$9.call(characterEntities$2, characters)
- ? characterEntities$2[characters]
+/**
+ * @param {string} characters
+ * @returns {string|false}
+ */
+function decodeEntity(characters) {
+ return own$5.call(characterEntities, characters)
+ ? characterEntities[characters]
: false
}
-var regexCheck$2 = regexCheck_1;
-
-var asciiDigit$3 = regexCheck$2(/\d/);
-
-var asciiDigit_1 = asciiDigit$3;
-
-var regexCheck$1 = regexCheck_1;
-
-var asciiHexDigit$1 = regexCheck$1(/[\dA-Fa-f]/);
-
-var asciiHexDigit_1 = asciiHexDigit$1;
-
-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$2);
+/**
+ * @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
+ */
-var characterReference$2 = {
+/** @type {Construct} */
+const characterReference$1 = {
name: 'characterReference',
tokenize: tokenizeCharacterReference
};
+/** @type {Tokenizer} */
function tokenizeCharacterReference(effects, ok, nok) {
- var self = this;
- var size = 0;
- var max;
- var test;
+ 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('characterReference');
@@ -35077,6 +37484,7 @@ function tokenizeCharacterReference(effects, ok, nok) {
effects.exit('characterReferenceMarker');
return open
}
+ /** @type {State} */
function open(code) {
if (code === 35) {
@@ -35088,9 +37496,10 @@ function tokenizeCharacterReference(effects, ok, nok) {
effects.enter('characterReferenceValue');
max = 31;
- test = asciiAlphanumeric$3;
+ test = asciiAlphanumeric;
return value(code)
}
+ /** @type {State} */
function numeric(code) {
if (code === 88 || code === 120) {
@@ -35105,19 +37514,21 @@ function tokenizeCharacterReference(effects, ok, nok) {
effects.enter('characterReferenceValue');
max = 7;
- test = asciiDigit$2;
+ test = asciiDigit;
return value(code)
}
+ /** @type {State} */
function value(code) {
- var token;
+ /** @type {Token} */
+ let token;
if (code === 59 && size) {
token = effects.exit('characterReferenceValue');
if (
- test === asciiAlphanumeric$3 &&
- !decodeEntity__default['default'](self.sliceSerialize(token))
+ test === asciiAlphanumeric &&
+ !decodeEntity(self.sliceSerialize(token))
) {
return nok(code)
}
@@ -35138,29 +37549,46 @@ function tokenizeCharacterReference(effects, ok, nok) {
}
}
-var characterReference_1 = characterReference$2;
-
-var markdownLineEnding$e = markdownLineEnding_1;
-var markdownLineEndingOrSpace$7 = markdownLineEndingOrSpace_1;
-var prefixSize$2 = prefixSize_1;
-var factorySpace$b = 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 codeFenced$1 = {
+/** @type {Construct} */
+const codeFenced = {
name: 'codeFenced',
tokenize: tokenizeCodeFenced,
concrete: true
};
+/** @type {Tokenizer} */
function tokenizeCodeFenced(effects, ok, nok) {
- var self = this;
- var closingFenceConstruct = {
+ const self = this;
+ /** @type {Construct} */
+
+ const closingFenceConstruct = {
tokenize: tokenizeClosingFence,
partial: true
};
- var initialPrefix = prefixSize$2(this.events, 'linePrefix');
- var sizeOpen = 0;
- var marker;
+ /** @type {Construct} */
+
+ 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<Code>} */
+
+ let marker;
return start
+ /** @type {State} */
function start(code) {
effects.enter('codeFenced');
@@ -35169,6 +37597,7 @@ function tokenizeCodeFenced(effects, ok, nok) {
marker = code;
return sequenceOpen(code)
}
+ /** @type {State} */
function sequenceOpen(code) {
if (code === marker) {
@@ -35180,11 +37609,12 @@ function tokenizeCodeFenced(effects, ok, nok) {
effects.exit('codeFencedFenceSequence');
return sizeOpen < 3
? nok(code)
- : factorySpace$b(effects, infoOpen, 'whitespace')(code)
+ : factorySpace(effects, infoOpen, 'whitespace')(code)
}
+ /** @type {State} */
function infoOpen(code) {
- if (code === null || markdownLineEnding$e(code)) {
+ if (code === null || markdownLineEnding(code)) {
return openAfter(code)
}
@@ -35194,21 +37624,23 @@ function tokenizeCodeFenced(effects, ok, nok) {
});
return info(code)
}
+ /** @type {State} */
function info(code) {
- if (code === null || markdownLineEndingOrSpace$7(code)) {
+ if (code === null || markdownLineEndingOrSpace(code)) {
effects.exit('chunkString');
effects.exit('codeFencedFenceInfo');
- return factorySpace$b(effects, infoAfter, 'whitespace')(code)
+ return factorySpace(effects, infoAfter, 'whitespace')(code)
}
if (code === 96 && code === marker) return nok(code)
effects.consume(code);
return info
}
+ /** @type {State} */
function infoAfter(code) {
- if (code === null || markdownLineEnding$e(code)) {
+ if (code === null || markdownLineEnding(code)) {
return openAfter(code)
}
@@ -35218,9 +37650,10 @@ function tokenizeCodeFenced(effects, ok, nok) {
});
return meta(code)
}
+ /** @type {State} */
function meta(code) {
- if (code === null || markdownLineEnding$e(code)) {
+ if (code === null || markdownLineEnding(code)) {
effects.exit('chunkString');
effects.exit('codeFencedFenceMeta');
return openAfter(code)
@@ -35230,65 +37663,97 @@ function tokenizeCodeFenced(effects, ok, nok) {
effects.consume(code);
return meta
}
+ /** @type {State} */
function openAfter(code) {
effects.exit('codeFencedFence');
- return self.interrupt ? ok(code) : content(code)
+ return self.interrupt ? ok(code) : contentStart(code)
}
+ /** @type {State} */
- function content(code) {
+ function contentStart(code) {
if (code === null) {
return after(code)
}
- if (markdownLineEnding$e(code)) {
- effects.enter('lineEnding');
- effects.consume(code);
- effects.exit('lineEnding');
+ if (markdownLineEnding(code)) {
return effects.attempt(
- closingFenceConstruct,
- after,
- initialPrefix
- ? factorySpace$b(effects, content, 'linePrefix', initialPrefix + 1)
- : content
- )
+ nonLazyLine,
+ effects.attempt(
+ closingFenceConstruct,
+ after,
+ initialPrefix
+ ? factorySpace(
+ effects,
+ contentStart,
+ 'linePrefix',
+ initialPrefix + 1
+ )
+ : contentStart
+ ),
+ after
+ )(code)
}
effects.enter('codeFlowValue');
return contentContinue(code)
}
+ /** @type {State} */
function contentContinue(code) {
- if (code === null || markdownLineEnding$e(code)) {
+ if (code === null || markdownLineEnding(code)) {
effects.exit('codeFlowValue');
- return content(code)
+ return contentStart(code)
}
effects.consume(code);
return contentContinue
}
+ /** @type {State} */
function after(code) {
effects.exit('codeFenced');
return ok(code)
}
+ /** @type {Tokenizer} */
+
+ 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} */
+
+ function lineStart(code) {
+ return self.parser.lazy[self.now().line] ? nok(code) : ok(code)
+ }
+ }
+ /** @type {Tokenizer} */
function tokenizeClosingFence(effects, ok, nok) {
- var size = 0;
- return factorySpace$b(
+ let size = 0;
+ return factorySpace(
effects,
closingSequenceStart,
'linePrefix',
- this.parser.constructs.disable.null.indexOf('codeIndented') > -1
+ this.parser.constructs.disable.null.includes('codeIndented')
? undefined
: 4
)
+ /** @type {State} */
function closingSequenceStart(code) {
effects.enter('codeFencedFence');
effects.enter('codeFencedFenceSequence');
return closingSequence(code)
}
+ /** @type {State} */
function closingSequence(code) {
if (code === marker) {
@@ -35299,11 +37764,12 @@ function tokenizeCodeFenced(effects, ok, nok) {
if (size < sizeOpen) return nok(code)
effects.exit('codeFencedFenceSequence');
- return factorySpace$b(effects, closingSequenceEnd, 'whitespace')(code)
+ return factorySpace(effects, closingSequenceEnd, 'whitespace')(code)
}
+ /** @type {State} */
function closingSequenceEnd(code) {
- if (code === null || markdownLineEnding$e(code)) {
+ if (code === null || markdownLineEnding(code)) {
effects.exit('codeFencedFence');
return ok(code)
}
@@ -35313,52 +37779,64 @@ function tokenizeCodeFenced(effects, ok, nok) {
}
}
-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;
+/**
+ * @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 codeIndented$1 = {
+/** @type {Construct} */
+const codeIndented = {
name: 'codeIndented',
- tokenize: tokenizeCodeIndented,
- resolve: resolveCodeIndented
+ tokenize: tokenizeCodeIndented
};
-var indentedContentConstruct = {
+/** @type {Construct} */
+
+const indentedContent = {
tokenize: tokenizeIndentedContent,
partial: true
};
-
-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
-}
+/** @type {Tokenizer} */
function tokenizeCodeIndented(effects, ok, nok) {
- return effects.attempt(indentedContentConstruct, afterPrefix, nok)
+ const self = this;
+ return start
+ /** @type {State} */
+
+ function start(code) {
+ effects.enter('codeIndented');
+ return factorySpace(effects, afterStartPrefix, 'linePrefix', 4 + 1)(code)
+ }
+ /** @type {State} */
+
+ 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} */
function afterPrefix(code) {
if (code === null) {
- return ok(code)
+ return after(code)
}
- if (markdownLineEnding$d(code)) {
- return effects.attempt(indentedContentConstruct, afterPrefix, ok)(code)
+ if (markdownLineEnding(code)) {
+ return effects.attempt(indentedContent, afterPrefix, after)(code)
}
effects.enter('codeFlowValue');
return content(code)
}
+ /** @type {State} */
function content(code) {
- if (code === null || markdownLineEnding$d(code)) {
+ if (code === null || markdownLineEnding(code)) {
effects.exit('codeFlowValue');
return afterPrefix(code)
}
@@ -35366,40 +37844,76 @@ function tokenizeCodeIndented(effects, ok, nok) {
effects.consume(code);
return content
}
+ /** @type {State} */
+
+ function after(code) {
+ effects.exit('codeIndented');
+ return ok(code)
+ }
}
+/** @type {Tokenizer} */
function tokenizeIndentedContent(effects, ok, nok) {
- var self = this;
- return factorySpace$a(effects, afterPrefix, 'linePrefix', 4 + 1)
+ const self = this;
+ return start
+ /** @type {State} */
- function afterPrefix(code) {
- if (markdownLineEnding$d(code)) {
+ function start(code) {
+ // If this is a lazy line, it can’t be code.
+ if (self.parser.lazy[self.now().line]) {
+ return nok(code)
+ }
+
+ if (markdownLineEnding(code)) {
effects.enter('lineEnding');
effects.consume(code);
effects.exit('lineEnding');
- return factorySpace$a(effects, afterPrefix, 'linePrefix', 4 + 1)
+ return start
}
- return prefixSize$1(self.events, 'linePrefix') < 4 ? nok(code) : ok(code)
+ return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)
}
-}
+ /** @type {State} */
-var codeIndented_1 = codeIndented$1;
+ 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 markdownLineEnding$c = markdownLineEnding_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').Previous} Previous
+ * @typedef {import('micromark-util-types').Token} Token
+ * @typedef {import('micromark-util-types').State} State
+ */
-var codeText$1 = {
+/** @type {Construct} */
+const codeText = {
name: 'codeText',
tokenize: tokenizeCodeText,
resolve: resolveCodeText,
previous: previous$1
};
+/** @type {Resolver} */
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.
+ let tailExitIndex = events.length - 4;
+ let headEnterIndex = 3;
+ /** @type {number} */
+
+ let index;
+ /** @type {number|undefined} */
+
+ let enter; // If we start and end with an EOL or a space.
if (
(events[headEnterIndex][1].type === 'lineEnding' ||
@@ -35412,8 +37926,8 @@ function resolveCodeText(events) {
while (++index < tailExitIndex) {
if (events[index][1].type === 'codeTextData') {
// Then we have padding.
- events[tailExitIndex][1].type = events[headEnterIndex][1].type =
- 'codeTextPadding';
+ events[headEnterIndex][1].type = 'codeTextPadding';
+ events[tailExitIndex][1].type = 'codeTextPadding';
headEnterIndex += 2;
tailExitIndex -= 2;
break
@@ -35448,6 +37962,7 @@ function resolveCodeText(events) {
return events
}
+/** @type {Previous} */
function previous$1(code) {
// If there is a previous code, there will always be a tail.
@@ -35456,18 +37971,25 @@ function previous$1(code) {
this.events[this.events.length - 1][1].type === 'characterEscape'
)
}
+/** @type {Tokenizer} */
function tokenizeCodeText(effects, ok, nok) {
- var sizeOpen = 0;
- var size;
- var token;
+ let sizeOpen = 0;
+ /** @type {number} */
+
+ let size;
+ /** @type {Token} */
+
+ let token;
return start
+ /** @type {State} */
function start(code) {
effects.enter('codeText');
effects.enter('codeTextSequence');
return openingSequence(code)
}
+ /** @type {State} */
function openingSequence(code) {
if (code === 96) {
@@ -35479,6 +38001,7 @@ function tokenizeCodeText(effects, ok, nok) {
effects.exit('codeTextSequence');
return gap(code)
}
+ /** @type {State} */
function gap(code) {
// EOF.
@@ -35500,7 +38023,7 @@ function tokenizeCodeText(effects, ok, nok) {
return gap
}
- if (markdownLineEnding$c(code)) {
+ if (markdownLineEnding(code)) {
effects.enter('lineEnding');
effects.consume(code);
effects.exit('lineEnding');
@@ -35511,12 +38034,14 @@ function tokenizeCodeText(effects, ok, nok) {
return data(code)
} // In code.
+ /** @type {State} */
+
function data(code) {
if (
code === null ||
code === 32 ||
code === 96 ||
- markdownLineEnding$c(code)
+ markdownLineEnding(code)
) {
effects.exit('codeTextData');
return gap(code)
@@ -35526,6 +38051,8 @@ function tokenizeCodeText(effects, ok, nok) {
return data
} // Closing fence.
+ /** @type {State} */
+
function closingSequence(code) {
// More.
if (code === 96) {
@@ -35545,14 +38072,394 @@ function tokenizeCodeText(effects, ok, nok) {
}
}
-var codeText_1 = codeText$1;
+/**
+ * @typedef {import('micromark-util-types').Token} Token
+ * @typedef {import('micromark-util-types').Chunk} Chunk
+ * @typedef {import('micromark-util-types').Event} Event
+ */
+
+/**
+ * Tokenize subcontent.
+ *
+ * @param {Event[]} events
+ * @returns {boolean}
+ */
+function subtokenize(events) {
+ /** @type {Record<string, number>} */
+ const jumps = {};
+ let index = -1;
+ /** @type {Event} */
+
+ let event;
+ /** @type {number|undefined} */
+
+ let lineIndex;
+ /** @type {number} */
+
+ let otherIndex;
+ /** @type {Event} */
+
+ let otherEvent;
+ /** @type {Event[]} */
+
+ let parameters;
+ /** @type {Event[]} */
+
+ 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 (
+ otherIndex < subevents.length &&
+ subevents[otherIndex][1].type === 'content'
+ ) {
+ while (++otherIndex < subevents.length) {
+ if (subevents[otherIndex][1].type === 'content') {
+ break
+ }
+
+ if (subevents[otherIndex][1].type === 'chunkText') {
+ subevents[otherIndex][1]._isInFirstContentOfListItem = true;
+ otherIndex++;
+ }
+ }
+ }
+ } // Enter.
+
+ 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;
+
+ while (otherIndex--) {
+ otherEvent = events[otherIndex];
+
+ if (
+ otherEvent[1].type === 'lineEnding' ||
+ otherEvent[1].type === 'lineEndingBlank'
+ ) {
+ if (otherEvent[0] === 'enter') {
+ if (lineIndex) {
+ events[lineIndex][1].type = 'lineEndingBlank';
+ }
+
+ otherEvent[1].type = 'lineEnding';
+ lineIndex = otherIndex;
+ }
+ } else {
+ break
+ }
+ }
+
+ if (lineIndex) {
+ // Fix position.
+ event[1].end = Object.assign({}, events[lineIndex][1].start); // Switch container exit w/ line endings.
+
+ parameters = events.slice(lineIndex, index);
+ parameters.unshift(event);
+ splice(events, lineIndex, index - lineIndex + 1, parameters);
+ }
+ }
+ }
+
+ return !more
+}
+/**
+ * Tokenize embedded tokens.
+ *
+ * @param {Event[]} events
+ * @param {number} eventIndex
+ * @returns {Record<string, number>}
+ */
+
+function subcontent(events, eventIndex) {
+ const token = events[eventIndex][1];
+ const context = events[eventIndex][2];
+ let startPosition = eventIndex - 1;
+ /** @type {number[]} */
+
+ const startPositions = [];
+ const tokenizer =
+ token._tokenizer || context.parser[token.contentType](token.start);
+ const childEvents = tokenizer.events;
+ /** @type {[number, number][]} */
+
+ const jumps = [];
+ /** @type {Record<string, number>} */
+
+ const gaps = {};
+ /** @type {Chunk[]} */
+
+ let stream;
+ /** @type {Token|undefined} */
+
+ let previous;
+ let index = -1;
+ /** @type {Token|undefined} */
+
+ 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.
+
+ while (current) {
+ // Find the position of the event for this token.
+ while (events[++startPosition][1] !== current) {
+ // Empty.
+ }
+
+ startPositions.push(startPosition);
+
+ if (!current._tokenizer) {
+ stream = context.sliceStream(current);
+
+ if (!current.next) {
+ stream.push(null);
+ }
+
+ if (previous) {
+ tokenizer.defineSkip(current.start);
+ }
+
+ if (current._isInFirstContentOfListItem) {
+ tokenizer._gfmTasklistFirstContentOfListItem = true;
+ }
+
+ tokenizer.write(stream);
+
+ if (current._isInFirstContentOfListItem) {
+ tokenizer._gfmTasklistFirstContentOfListItem = undefined;
+ }
+ } // Unravel the next token.
+
+ previous = current;
+ current = current.next;
+ } // Now, loop back through all events (and linked tokens), to figure out which
+ // parts belong where.
+
+ current = token;
+
+ 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.
+
+ current._tokenizer = undefined;
+ current.previous = undefined;
+ current = current.next;
+ }
+ } // Help GC.
+
+ 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.
+
+ 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.
+
+ index = breaks.length;
+
+ 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);
+ }
+
+ index = -1;
+
+ while (++index < jumps.length) {
+ gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];
+ adjust += jumps[index][1] - jumps[index][0] - 1;
+ }
+
+ return gaps
+}
+
+/**
+ * @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
+ */
+
+/**
+ * No name because it must not be turned off.
+ * @type {Construct}
+ */
+const content = {
+ tokenize: tokenizeContent,
+ resolve: resolveContent
+};
+/** @type {Construct} */
+
+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}
+ */
+
+function resolveContent(events) {
+ subtokenize(events);
+ return events
+}
+/** @type {Tokenizer} */
+
+function tokenizeContent(effects, ok) {
+ /** @type {Token} */
+ let previous;
+ return start
+ /** @type {State} */
+
+ function start(code) {
+ effects.enter('content');
+ previous = effects.enter('chunkContent', {
+ contentType: 'content'
+ });
+ return data(code)
+ }
+ /** @type {State} */
+
+ function data(code) {
+ if (code === null) {
+ return contentEnd(code)
+ }
+
+ if (markdownLineEnding(code)) {
+ return effects.check(
+ continuationConstruct,
+ contentContinue,
+ contentEnd
+ )(code)
+ } // Data.
+
+ effects.consume(code);
+ return data
+ }
+ /** @type {State} */
+
+ function contentEnd(code) {
+ effects.exit('chunkContent');
+ effects.exit('content');
+ return ok(code)
+ }
+ /** @type {State} */
+
+ 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 tokenizeContinuation(effects, ok, nok) {
+ const self = this;
+ return startLookahead
+ /** @type {State} */
-var asciiControl$1 = asciiControl_1;
-var markdownLineEndingOrSpace$6 = markdownLineEndingOrSpace_1;
-var markdownLineEnding$b = markdownLineEnding_1;
+ function startLookahead(code) {
+ effects.exit('chunkContent');
+ effects.enter('lineEnding');
+ effects.consume(code);
+ effects.exit('lineEnding');
+ return factorySpace(effects, prefixed, 'linePrefix')
+ }
+ /** @type {State} */
+
+ function prefixed(code) {
+ if (code === null || markdownLineEnding(code)) {
+ return nok(code)
+ }
+
+ const tail = self.events[self.events.length - 1];
+
+ if (
+ !self.parser.constructs.disable.null.includes('codeIndented') &&
+ tail &&
+ tail[1].type === 'linePrefix' &&
+ tail[2].sliceSerialize(tail[1], true).length >= 4
+ ) {
+ return ok(code)
+ }
+
+ return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)
+ }
+}
+/**
+ * @typedef {import('micromark-util-types').Effects} Effects
+ * @typedef {import('micromark-util-types').State} State
+ */
+
+/**
+ * @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 destinationFactory(
+function factoryDestination(
effects,
ok,
nok,
@@ -35563,9 +38470,10 @@ function destinationFactory(
stringType,
max
) {
- var limit = max || Infinity;
- var balance = 0;
+ const limit = max || Number.POSITIVE_INFINITY;
+ let balance = 0;
return start
+ /** @type {State} */
function start(code) {
if (code === 60) {
@@ -35577,7 +38485,7 @@ function destinationFactory(
return destinationEnclosedBefore
}
- if (asciiControl$1(code) || code === 41) {
+ if (code === null || code === 41 || asciiControl(code)) {
return nok(code)
}
@@ -35589,6 +38497,7 @@ function destinationFactory(
});
return destinationRaw(code)
}
+ /** @type {State} */
function destinationEnclosedBefore(code) {
if (code === 62) {
@@ -35606,6 +38515,7 @@ function destinationFactory(
});
return destinationEnclosed(code)
}
+ /** @type {State} */
function destinationEnclosed(code) {
if (code === 62) {
@@ -35614,13 +38524,14 @@ function destinationFactory(
return destinationEnclosedBefore(code)
}
- if (code === null || code === 60 || markdownLineEnding$b(code)) {
+ if (code === null || code === 60 || markdownLineEnding(code)) {
return nok(code)
}
effects.consume(code);
return code === 92 ? destinationEnclosedEscape : destinationEnclosed
}
+ /** @type {State} */
function destinationEnclosedEscape(code) {
if (code === 60 || code === 62 || code === 92) {
@@ -35630,6 +38541,7 @@ function destinationFactory(
return destinationEnclosed(code)
}
+ /** @type {State} */
function destinationRaw(code) {
if (code === 40) {
@@ -35651,7 +38563,7 @@ function destinationFactory(
return destinationRaw
}
- if (code === null || markdownLineEndingOrSpace$6(code)) {
+ if (code === null || markdownLineEndingOrSpace(code)) {
if (balance) return nok(code)
effects.exit('chunkString');
effects.exit(stringType);
@@ -35660,10 +38572,11 @@ function destinationFactory(
return ok(code)
}
- if (asciiControl$1(code)) return nok(code)
+ if (asciiControl(code)) return nok(code)
effects.consume(code);
return code === 92 ? destinationRawEscape : destinationRaw
}
+ /** @type {State} */
function destinationRawEscape(code) {
if (code === 40 || code === 41 || code === 92) {
@@ -35675,17 +38588,31 @@ function destinationFactory(
}
}
-var factoryDestination$2 = destinationFactory;
-
-var markdownLineEnding$a = markdownLineEnding_1;
-var markdownSpace$7 = markdownSpace_1;
+/**
+ * @typedef {import('micromark-util-types').Effects} Effects
+ * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext
+ * @typedef {import('micromark-util-types').State} State
+ */
+/**
+ * @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 labelFactory(effects, ok, nok, type, markerType, stringType) {
- var self = this;
- var size = 0;
- var data;
+function factoryLabel(effects, ok, nok, type, markerType, stringType) {
+ const self = this;
+ let size = 0;
+ /** @type {boolean} */
+
+ let data;
return start
+ /** @type {State} */
function start(code) {
effects.enter(type);
@@ -35695,17 +38622,18 @@ function labelFactory(effects, ok, nok, type, markerType, stringType) {
effects.enter(stringType);
return atBreak
}
+ /** @type {State} */
function atBreak(code) {
if (
code === null ||
code === 91 ||
(code === 93 && !data) ||
- /* c8 ignore next */
+ /* Hidden footnotes hook */
+
+ /* c8 ignore next 3 */
(code === 94 &&
- /* c8 ignore next */
!size &&
- /* c8 ignore next */
'_hiddenFootnoteSupport' in self.parser.constructs) ||
size > 999
) {
@@ -35721,7 +38649,7 @@ function labelFactory(effects, ok, nok, type, markerType, stringType) {
return ok
}
- if (markdownLineEnding$a(code)) {
+ if (markdownLineEnding(code)) {
effects.enter('lineEnding');
effects.consume(code);
effects.exit('lineEnding');
@@ -35733,13 +38661,14 @@ function labelFactory(effects, ok, nok, type, markerType, stringType) {
});
return label(code)
}
+ /** @type {State} */
function label(code) {
if (
code === null ||
code === 91 ||
code === 93 ||
- markdownLineEnding$a(code) ||
+ markdownLineEnding(code) ||
size++ > 999
) {
effects.exit('chunkString');
@@ -35747,9 +38676,10 @@ function labelFactory(effects, ok, nok, type, markerType, stringType) {
}
effects.consume(code);
- data = data || !markdownSpace$7(code);
+ data = data || !markdownSpace(code);
return code === 92 ? labelEscape : label
}
+ /** @type {State} */
function labelEscape(code) {
if (code === 91 || code === 92 || code === 93) {
@@ -35762,45 +38692,27 @@ function labelFactory(effects, ok, nok, type, markerType, stringType) {
}
}
-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$9(code)) {
- effects.enter('lineEnding');
- effects.consume(code);
- effects.exit('lineEnding');
- seen = true;
- return start
- }
-
- if (markdownSpace$6(code)) {
- return factorySpace$9(
- effects,
- start,
- seen ? 'linePrefix' : 'lineSuffix'
- )(code)
- }
-
- return ok(code)
- }
-}
-
-var factoryWhitespace$2 = whitespaceFactory;
-
-var markdownLineEnding$8 = markdownLineEnding_1;
-var factorySpace$8 = factorySpace$i;
+/**
+ * @typedef {import('micromark-util-types').Effects} Effects
+ * @typedef {import('micromark-util-types').State} State
+ * @typedef {import('micromark-util-types').Code} Code
+ */
-function titleFactory(effects, ok, nok, type, markerType, stringType) {
- var marker;
+/**
+ * @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<Code>} */
+ let marker;
return start
+ /** @type {State} */
function start(code) {
effects.enter(type);
@@ -35810,6 +38722,7 @@ function titleFactory(effects, ok, nok, type, markerType, stringType) {
marker = code === 40 ? 41 : code;
return atFirstTitleBreak
}
+ /** @type {State} */
function atFirstTitleBreak(code) {
if (code === marker) {
@@ -35823,6 +38736,7 @@ function titleFactory(effects, ok, nok, type, markerType, stringType) {
effects.enter(stringType);
return atTitleBreak(code)
}
+ /** @type {State} */
function atTitleBreak(code) {
if (code === marker) {
@@ -35834,11 +38748,11 @@ function titleFactory(effects, ok, nok, type, markerType, stringType) {
return nok(code)
} // Note: blank lines can’t exist in content.
- if (markdownLineEnding$8(code)) {
+ if (markdownLineEnding(code)) {
effects.enter('lineEnding');
effects.consume(code);
effects.exit('lineEnding');
- return factorySpace$8(effects, atTitleBreak, 'linePrefix')
+ return factorySpace(effects, atTitleBreak, 'linePrefix')
}
effects.enter('chunkString', {
@@ -35846,9 +38760,10 @@ function titleFactory(effects, ok, nok, type, markerType, stringType) {
});
return title(code)
}
+ /** @type {State} */
function title(code) {
- if (code === marker || code === null || markdownLineEnding$8(code)) {
+ if (code === marker || code === null || markdownLineEnding(code)) {
effects.exit('chunkString');
return atTitleBreak(code)
}
@@ -35856,6 +38771,7 @@ function titleFactory(effects, ok, nok, type, markerType, stringType) {
effects.consume(code);
return code === 92 ? titleEscape : title
}
+ /** @type {State} */
function titleEscape(code) {
if (code === marker || code === 92) {
@@ -35867,34 +38783,93 @@ function titleFactory(effects, ok, nok, type, markerType, stringType) {
}
}
-var factoryTitle$2 = titleFactory;
+/**
+ * @typedef {import('micromark-util-types').Effects} Effects
+ * @typedef {import('micromark-util-types').State} State
+ */
-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;
+/**
+ * @param {Effects} effects
+ * @param {State} ok
+ */
+function factoryWhitespace(effects, ok) {
+ /** @type {boolean} */
+ let seen;
+ return start
+ /** @type {State} */
+
+ function start(code) {
+ if (markdownLineEnding(code)) {
+ effects.enter('lineEnding');
+ effects.consume(code);
+ effects.exit('lineEnding');
+ seen = true;
+ return start
+ }
-var definition$2 = {
+ if (markdownSpace(code)) {
+ return factorySpace(
+ effects,
+ start,
+ seen ? 'linePrefix' : 'lineSuffix'
+ )(code)
+ }
+
+ return ok(code)
+ }
+}
+
+/**
+ * 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()
+ )
+}
+
+/**
+ * @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
};
-var titleConstruct = {
+/** @type {Construct} */
+
+const titleConstruct = {
tokenize: tokenizeTitle,
partial: true
};
+/** @type {Tokenizer} */
function tokenizeDefinition(effects, ok, nok) {
- var self = this;
- var identifier;
+ const self = this;
+ /** @type {string} */
+
+ let identifier;
return start
+ /** @type {State} */
function start(code) {
effects.enter('definition');
- return factoryLabel$1.call(
+ return factoryLabel.call(
self,
effects,
labelAfter,
@@ -35904,9 +38879,10 @@ function tokenizeDefinition(effects, ok, nok) {
'definitionLabelString'
)(code)
}
+ /** @type {State} */
function labelAfter(code) {
- identifier = normalizeIdentifier$3(
+ identifier = normalizeIdentifier(
self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)
);
@@ -35915,14 +38891,14 @@ function tokenizeDefinition(effects, ok, nok) {
effects.consume(code);
effects.exit('definitionMarker'); // Note: blank lines can’t exist in content.
- return factoryWhitespace$1(
+ return factoryWhitespace(
effects,
- factoryDestination$1(
+ factoryDestination(
effects,
effects.attempt(
titleConstruct,
- factorySpace$7(effects, after, 'whitespace'),
- factorySpace$7(effects, after, 'whitespace')
+ factorySpace(effects, after, 'whitespace'),
+ factorySpace(effects, after, 'whitespace')
),
nok,
'definitionDestination',
@@ -35936,12 +38912,13 @@ function tokenizeDefinition(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function after(code) {
- if (code === null || markdownLineEnding$7(code)) {
+ if (code === null || markdownLineEnding(code)) {
effects.exit('definition');
- if (self.parser.defined.indexOf(identifier) < 0) {
+ if (!self.parser.defined.includes(identifier)) {
self.parser.defined.push(identifier);
}
@@ -35951,21 +38928,24 @@ function tokenizeDefinition(effects, ok, nok) {
return nok(code)
}
}
+/** @type {Tokenizer} */
function tokenizeTitle(effects, ok, nok) {
return start
+ /** @type {State} */
function start(code) {
- return markdownLineEndingOrSpace$5(code)
- ? factoryWhitespace$1(effects, before)(code)
+ return markdownLineEndingOrSpace(code)
+ ? factoryWhitespace(effects, before)(code)
: nok(code)
}
+ /** @type {State} */
function before(code) {
if (code === 34 || code === 39 || code === 40) {
- return factoryTitle$1(
+ return factoryTitle(
effects,
- factorySpace$7(effects, after, 'whitespace'),
+ factorySpace(effects, after, 'whitespace'),
nok,
'definitionTitle',
'definitionTitleMarker',
@@ -35975,23 +38955,29 @@ function tokenizeTitle(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function after(code) {
- return code === null || markdownLineEnding$7(code) ? ok(code) : nok(code)
+ return code === null || markdownLineEnding(code) ? ok(code) : nok(code)
}
}
-var definition_1$1 = definition$2;
-
-var markdownLineEnding$6 = markdownLineEnding_1;
+/**
+ * @typedef {import('micromark-util-types').Construct} Construct
+ * @typedef {import('micromark-util-types').Tokenizer} Tokenizer
+ * @typedef {import('micromark-util-types').State} State
+ */
-var hardBreakEscape$1 = {
+/** @type {Construct} */
+const hardBreakEscape = {
name: 'hardBreakEscape',
tokenize: tokenizeHardBreakEscape
};
+/** @type {Tokenizer} */
function tokenizeHardBreakEscape(effects, ok, nok) {
return start
+ /** @type {State} */
function start(code) {
effects.enter('hardBreakEscape');
@@ -35999,9 +38985,10 @@ function tokenizeHardBreakEscape(effects, ok, nok) {
effects.consume(code);
return open
}
+ /** @type {State} */
function open(code) {
- if (markdownLineEnding$6(code)) {
+ if (markdownLineEnding(code)) {
effects.exit('escapeMarker');
effects.exit('hardBreakEscape');
return ok(code)
@@ -36011,25 +38998,31 @@ function tokenizeHardBreakEscape(effects, ok, nok) {
}
}
-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;
+/**
+ * @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
+ */
-var headingAtx$1 = {
+/** @type {Construct} */
+const headingAtx = {
name: 'headingAtx',
tokenize: tokenizeHeadingAtx,
resolve: resolveHeadingAtx
};
+/** @type {Resolver} */
function resolveHeadingAtx(events, context) {
- var contentEnd = events.length - 2;
- var contentStart = 3;
- var content;
- var text; // Prefix whitespace, part of the opening.
+ let contentEnd = events.length - 2;
+ let contentStart = 3;
+ /** @type {Token} */
+
+ let content;
+ /** @type {Token} */
+
+ let text; // Prefix whitespace, part of the opening.
if (events[contentStart][1].type === 'whitespace') {
contentStart += 2;
@@ -36061,9 +39054,10 @@ function resolveHeadingAtx(events, context) {
type: 'chunkText',
start: events[contentStart][1].start,
end: events[contentEnd][1].end,
+ // @ts-expect-error Constants are fine to assign.
contentType: 'text'
};
- chunkedSplice$1(events, contentStart, contentEnd - contentStart + 1, [
+ splice(events, contentStart, contentEnd - contentStart + 1, [
['enter', content, context],
['enter', text, context],
['exit', text, context],
@@ -36073,17 +39067,20 @@ function resolveHeadingAtx(events, context) {
return events
}
+/** @type {Tokenizer} */
function tokenizeHeadingAtx(effects, ok, nok) {
- var self = this;
- var size = 0;
+ const self = this;
+ let size = 0;
return start
+ /** @type {State} */
function start(code) {
effects.enter('atxHeading');
effects.enter('atxHeadingSequence');
return fenceOpenInside(code)
}
+ /** @type {State} */
function fenceOpenInside(code) {
if (code === 35 && size++ < 6) {
@@ -36091,13 +39088,14 @@ function tokenizeHeadingAtx(effects, ok, nok) {
return fenceOpenInside
}
- if (code === null || markdownLineEndingOrSpace$4(code)) {
+ if (code === null || markdownLineEndingOrSpace(code)) {
effects.exit('atxHeadingSequence');
return self.interrupt ? ok(code) : headingBreak(code)
}
return nok(code)
}
+ /** @type {State} */
function headingBreak(code) {
if (code === 35) {
@@ -36105,18 +39103,19 @@ function tokenizeHeadingAtx(effects, ok, nok) {
return sequence(code)
}
- if (code === null || markdownLineEnding$5(code)) {
+ if (code === null || markdownLineEnding(code)) {
effects.exit('atxHeading');
return ok(code)
}
- if (markdownSpace$5(code)) {
- return factorySpace$6(effects, headingBreak, 'whitespace')(code)
+ if (markdownSpace(code)) {
+ return factorySpace(effects, headingBreak, 'whitespace')(code)
}
effects.enter('atxHeadingText');
return data(code)
}
+ /** @type {State} */
function sequence(code) {
if (code === 35) {
@@ -36127,9 +39126,10 @@ function tokenizeHeadingAtx(effects, ok, nok) {
effects.exit('atxHeadingSequence');
return headingBreak(code)
}
+ /** @type {State} */
function data(code) {
- if (code === null || code === 35 || markdownLineEndingOrSpace$4(code)) {
+ if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {
effects.exit('atxHeadingText');
return headingBreak(code)
}
@@ -36139,10 +39139,17 @@ function tokenizeHeadingAtx(effects, ok, nok) {
}
}
-var headingAtx_1 = headingAtx$1;
-
-// This module is copied from <https://spec.commonmark.org/0.29/#html-blocks>.
-var basics = [
+/**
+ * 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:
+ * <https://spec.commonmark.org/0.29/#html-blocks>.
+ */
+const htmlBlockNames = [
'address',
'article',
'aside',
@@ -36207,36 +39214,45 @@ var basics = [
'ul'
];
-var htmlBlockNames$1 = basics;
-
-// This module is copied from <https://spec.commonmark.org/0.29/#html-blocks>.
-var raws = ['pre', 'script', 'style', 'textarea'];
-
-var htmlRawNames$1 = raws;
+/**
+ * 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:
+ * <https://spec.commonmark.org/0.29/#html-blocks>.
+ *
+ * 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'];
-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;
+/**
+ * @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} */
-var htmlFlow$1 = {
+const htmlFlow = {
name: 'htmlFlow',
tokenize: tokenizeHtmlFlow,
resolveTo: resolveToHtmlFlow,
concrete: true
};
-var nextBlankConstruct = {
+/** @type {Construct} */
+
+const nextBlankConstruct = {
tokenize: tokenizeNextBlank,
partial: true
};
+/** @type {Resolver} */
function resolveToHtmlFlow(events) {
- var index = events.length;
+ let index = events.length;
while (index--) {
if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {
@@ -36255,15 +39271,27 @@ function resolveToHtmlFlow(events) {
return events
}
+/** @type {Tokenizer} */
function tokenizeHtmlFlow(effects, ok, nok) {
- var self = this;
- var kind;
- var startTag;
- var buffer;
- var index;
- var marker;
+ const self = this;
+ /** @type {number} */
+
+ let kind;
+ /** @type {boolean} */
+
+ let startTag;
+ /** @type {string} */
+
+ let buffer;
+ /** @type {number} */
+
+ let index;
+ /** @type {Code} */
+
+ let marker;
return start
+ /** @type {State} */
function start(code) {
effects.enter('htmlFlow');
@@ -36271,6 +39299,7 @@ function tokenizeHtmlFlow(effects, ok, nok) {
effects.consume(code);
return open
}
+ /** @type {State} */
function open(code) {
if (code === 33) {
@@ -36291,15 +39320,16 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return self.interrupt ? ok : continuationDeclarationInside
}
- if (asciiAlpha$2(code)) {
+ if (asciiAlpha(code)) {
effects.consume(code);
- buffer = fromCharCode(code);
+ buffer = String.fromCharCode(code);
startTag = true;
return tagName
}
return nok(code)
}
+ /** @type {State} */
function declarationStart(code) {
if (code === 45) {
@@ -36316,7 +39346,7 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return cdataOpenInside
}
- if (asciiAlpha$2(code)) {
+ if (asciiAlpha(code)) {
effects.consume(code);
kind = 4;
return self.interrupt ? ok : continuationDeclarationInside
@@ -36324,6 +39354,7 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function commentOpenInside(code) {
if (code === 45) {
@@ -36333,6 +39364,7 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function cdataOpenInside(code) {
if (code === buffer.charCodeAt(index++)) {
@@ -36346,34 +39378,36 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function tagCloseStart(code) {
- if (asciiAlpha$2(code)) {
+ if (asciiAlpha(code)) {
effects.consume(code);
- buffer = fromCharCode(code);
+ buffer = String.fromCharCode(code);
return tagName
}
return nok(code)
}
+ /** @type {State} */
function tagName(code) {
if (
code === null ||
code === 47 ||
code === 62 ||
- markdownLineEndingOrSpace$3(code)
+ markdownLineEndingOrSpace(code)
) {
if (
code !== 47 &&
startTag &&
- htmlRawNames.indexOf(buffer.toLowerCase()) > -1
+ htmlRawNames.includes(buffer.toLowerCase())
) {
kind = 1;
return self.interrupt ? ok(code) : continuation(code)
}
- if (htmlBlockNames.indexOf(buffer.toLowerCase()) > -1) {
+ if (htmlBlockNames.includes(buffer.toLowerCase())) {
kind = 6;
if (code === 47) {
@@ -36384,23 +39418,24 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return self.interrupt ? ok(code) : continuation(code)
}
- kind = 7; // Do not support complete HTML when interrupting.
+ kind = 7; // Do not support complete HTML when interrupting
- return self.interrupt
+ return self.interrupt && !self.parser.lazy[self.now().line]
? nok(code)
: startTag
? completeAttributeNameBefore(code)
: completeClosingTagAfter(code)
}
- if (code === 45 || asciiAlphanumeric$2(code)) {
+ if (code === 45 || asciiAlphanumeric(code)) {
effects.consume(code);
- buffer += fromCharCode(code);
+ buffer += String.fromCharCode(code);
return tagName
}
return nok(code)
}
+ /** @type {State} */
function basicSelfClosing(code) {
if (code === 62) {
@@ -36410,15 +39445,17 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function completeClosingTagAfter(code) {
- if (markdownSpace$4(code)) {
+ if (markdownSpace(code)) {
effects.consume(code);
return completeClosingTagAfter
}
return completeEnd(code)
}
+ /** @type {State} */
function completeAttributeNameBefore(code) {
if (code === 47) {
@@ -36426,18 +39463,19 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return completeEnd
}
- if (code === 58 || code === 95 || asciiAlpha$2(code)) {
+ if (code === 58 || code === 95 || asciiAlpha(code)) {
effects.consume(code);
return completeAttributeName
}
- if (markdownSpace$4(code)) {
+ if (markdownSpace(code)) {
effects.consume(code);
return completeAttributeNameBefore
}
return completeEnd(code)
}
+ /** @type {State} */
function completeAttributeName(code) {
if (
@@ -36445,7 +39483,7 @@ function tokenizeHtmlFlow(effects, ok, nok) {
code === 46 ||
code === 58 ||
code === 95 ||
- asciiAlphanumeric$2(code)
+ asciiAlphanumeric(code)
) {
effects.consume(code);
return completeAttributeName
@@ -36453,6 +39491,7 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return completeAttributeNameAfter(code)
}
+ /** @type {State} */
function completeAttributeNameAfter(code) {
if (code === 61) {
@@ -36460,13 +39499,14 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return completeAttributeValueBefore
}
- if (markdownSpace$4(code)) {
+ if (markdownSpace(code)) {
effects.consume(code);
return completeAttributeNameAfter
}
return completeAttributeNameBefore(code)
}
+ /** @type {State} */
function completeAttributeValueBefore(code) {
if (
@@ -36485,28 +39525,30 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return completeAttributeValueQuoted
}
- if (markdownSpace$4(code)) {
+ if (markdownSpace(code)) {
effects.consume(code);
return completeAttributeValueBefore
}
- marker = undefined;
+ marker = null;
return completeAttributeValueUnquoted(code)
}
+ /** @type {State} */
function completeAttributeValueQuoted(code) {
+ if (code === null || markdownLineEnding(code)) {
+ return nok(code)
+ }
+
if (code === marker) {
effects.consume(code);
return completeAttributeValueQuotedAfter
}
- if (code === null || markdownLineEnding$4(code)) {
- return nok(code)
- }
-
effects.consume(code);
return completeAttributeValueQuoted
}
+ /** @type {State} */
function completeAttributeValueUnquoted(code) {
if (
@@ -36517,7 +39559,7 @@ function tokenizeHtmlFlow(effects, ok, nok) {
code === 61 ||
code === 62 ||
code === 96 ||
- markdownLineEndingOrSpace$3(code)
+ markdownLineEndingOrSpace(code)
) {
return completeAttributeNameAfter(code)
}
@@ -36525,14 +39567,16 @@ function tokenizeHtmlFlow(effects, ok, nok) {
effects.consume(code);
return completeAttributeValueUnquoted
}
+ /** @type {State} */
function completeAttributeValueQuotedAfter(code) {
- if (code === 47 || code === 62 || markdownSpace$4(code)) {
+ if (code === 47 || code === 62 || markdownSpace(code)) {
return completeAttributeNameBefore(code)
}
return nok(code)
}
+ /** @type {State} */
function completeEnd(code) {
if (code === 62) {
@@ -36542,17 +39586,19 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function completeAfter(code) {
- if (markdownSpace$4(code)) {
+ if (markdownSpace(code)) {
effects.consume(code);
return completeAfter
}
- return code === null || markdownLineEnding$4(code)
+ return code === null || markdownLineEnding(code)
? continuation(code)
: nok(code)
}
+ /** @type {State} */
function continuation(code) {
if (code === 45 && kind === 2) {
@@ -36580,7 +39626,7 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return continuationCharacterDataInside
}
- if (markdownLineEnding$4(code) && (kind === 6 || kind === 7)) {
+ if (markdownLineEnding(code) && (kind === 6 || kind === 7)) {
return effects.check(
nextBlankConstruct,
continuationClose,
@@ -36588,34 +39634,59 @@ function tokenizeHtmlFlow(effects, ok, nok) {
)(code)
}
- if (code === null || markdownLineEnding$4(code)) {
+ if (code === null || markdownLineEnding(code)) {
return continuationAtLineEnding(code)
}
effects.consume(code);
return continuation
}
+ /** @type {State} */
function continuationAtLineEnding(code) {
effects.exit('htmlFlowData');
return htmlContinueStart(code)
}
+ /** @type {State} */
function htmlContinueStart(code) {
if (code === null) {
return done(code)
}
- if (markdownLineEnding$4(code)) {
+ if (markdownLineEnding(code)) {
+ return effects.attempt(
+ {
+ tokenize: htmlLineEnd,
+ partial: true
+ },
+ htmlContinueStart,
+ done
+ )(code)
+ }
+
+ effects.enter('htmlFlowData');
+ return continuation(code)
+ }
+ /** @type {Tokenizer} */
+
+ function htmlLineEnd(effects, ok, nok) {
+ return start
+ /** @type {State} */
+
+ function start(code) {
effects.enter('lineEnding');
effects.consume(code);
effects.exit('lineEnding');
- return htmlContinueStart
+ return lineStart
}
+ /** @type {State} */
- effects.enter('htmlFlowData');
- return continuation(code)
+ function lineStart(code) {
+ return self.parser.lazy[self.now().line] ? nok(code) : ok(code)
+ }
}
+ /** @type {State} */
function continuationCommentInside(code) {
if (code === 45) {
@@ -36625,6 +39696,7 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return continuation(code)
}
+ /** @type {State} */
function continuationRawTagOpen(code) {
if (code === 47) {
@@ -36635,21 +39707,23 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return continuation(code)
}
+ /** @type {State} */
function continuationRawEndTag(code) {
- if (code === 62 && htmlRawNames.indexOf(buffer.toLowerCase()) > -1) {
+ if (code === 62 && htmlRawNames.includes(buffer.toLowerCase())) {
effects.consume(code);
return continuationClose
}
- if (asciiAlpha$2(code) && buffer.length < 8) {
+ if (asciiAlpha(code) && buffer.length < 8) {
effects.consume(code);
- buffer += fromCharCode(code);
+ buffer += String.fromCharCode(code);
return continuationRawEndTag
}
return continuation(code)
}
+ /** @type {State} */
function continuationCharacterDataInside(code) {
if (code === 93) {
@@ -36659,6 +39733,7 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return continuation(code)
}
+ /** @type {State} */
function continuationDeclarationInside(code) {
if (code === 62) {
@@ -36668,9 +39743,10 @@ function tokenizeHtmlFlow(effects, ok, nok) {
return continuation(code)
}
+ /** @type {State} */
function continuationClose(code) {
- if (code === null || markdownLineEnding$4(code)) {
+ if (code === null || markdownLineEnding(code)) {
effects.exit('htmlFlowData');
return done(code)
}
@@ -36678,46 +39754,58 @@ function tokenizeHtmlFlow(effects, ok, nok) {
effects.consume(code);
return continuationClose
}
+ /** @type {State} */
function done(code) {
effects.exit('htmlFlow');
return ok(code)
}
}
+/** @type {Tokenizer} */
function tokenizeNextBlank(effects, ok, nok) {
return start
+ /** @type {State} */
function start(code) {
effects.exit('htmlFlowData');
effects.enter('lineEndingBlank');
effects.consume(code);
effects.exit('lineEndingBlank');
- return effects.attempt(partialBlankLine$1, ok, nok)
+ return effects.attempt(blankLine, ok, nok)
}
}
-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;
+/**
+ * @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 htmlText$1 = {
+/** @type {Construct} */
+const htmlText = {
name: 'htmlText',
tokenize: tokenizeHtmlText
};
+/** @type {Tokenizer} */
function tokenizeHtmlText(effects, ok, nok) {
- var self = this;
- var marker;
- var buffer;
- var index;
- var returnState;
+ const self = this;
+ /** @type {NonNullable<Code>|undefined} */
+
+ let marker;
+ /** @type {string} */
+
+ let buffer;
+ /** @type {number} */
+
+ let index;
+ /** @type {State} */
+
+ let returnState;
return start
+ /** @type {State} */
function start(code) {
effects.enter('htmlText');
@@ -36725,6 +39813,7 @@ function tokenizeHtmlText(effects, ok, nok) {
effects.consume(code);
return open
}
+ /** @type {State} */
function open(code) {
if (code === 33) {
@@ -36742,13 +39831,14 @@ function tokenizeHtmlText(effects, ok, nok) {
return instruction
}
- if (asciiAlpha$1(code)) {
+ if (asciiAlpha(code)) {
effects.consume(code);
return tagOpen
}
return nok(code)
}
+ /** @type {State} */
function declarationOpen(code) {
if (code === 45) {
@@ -36763,13 +39853,14 @@ function tokenizeHtmlText(effects, ok, nok) {
return cdataOpen
}
- if (asciiAlpha$1(code)) {
+ if (asciiAlpha(code)) {
effects.consume(code);
return declaration
}
return nok(code)
}
+ /** @type {State} */
function commentOpen(code) {
if (code === 45) {
@@ -36779,6 +39870,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function commentStart(code) {
if (code === null || code === 62) {
@@ -36792,6 +39884,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return comment(code)
}
+ /** @type {State} */
function commentStartDash(code) {
if (code === null || code === 62) {
@@ -36800,6 +39893,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return comment(code)
}
+ /** @type {State} */
function comment(code) {
if (code === null) {
@@ -36811,7 +39905,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return commentClose
}
- if (markdownLineEnding$3(code)) {
+ if (markdownLineEnding(code)) {
returnState = comment;
return atLineEnding(code)
}
@@ -36819,6 +39913,7 @@ function tokenizeHtmlText(effects, ok, nok) {
effects.consume(code);
return comment
}
+ /** @type {State} */
function commentClose(code) {
if (code === 45) {
@@ -36828,6 +39923,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return comment(code)
}
+ /** @type {State} */
function cdataOpen(code) {
if (code === buffer.charCodeAt(index++)) {
@@ -36837,6 +39933,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function cdata(code) {
if (code === null) {
@@ -36848,7 +39945,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return cdataClose
}
- if (markdownLineEnding$3(code)) {
+ if (markdownLineEnding(code)) {
returnState = cdata;
return atLineEnding(code)
}
@@ -36856,6 +39953,7 @@ function tokenizeHtmlText(effects, ok, nok) {
effects.consume(code);
return cdata
}
+ /** @type {State} */
function cdataClose(code) {
if (code === 93) {
@@ -36865,6 +39963,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return cdata(code)
}
+ /** @type {State} */
function cdataEnd(code) {
if (code === 62) {
@@ -36878,13 +39977,14 @@ function tokenizeHtmlText(effects, ok, nok) {
return cdata(code)
}
+ /** @type {State} */
function declaration(code) {
if (code === null || code === 62) {
return end(code)
}
- if (markdownLineEnding$3(code)) {
+ if (markdownLineEnding(code)) {
returnState = declaration;
return atLineEnding(code)
}
@@ -36892,6 +39992,7 @@ function tokenizeHtmlText(effects, ok, nok) {
effects.consume(code);
return declaration
}
+ /** @type {State} */
function instruction(code) {
if (code === null) {
@@ -36903,7 +40004,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return instructionClose
}
- if (markdownLineEnding$3(code)) {
+ if (markdownLineEnding(code)) {
returnState = instruction;
return atLineEnding(code)
}
@@ -36911,55 +40012,61 @@ function tokenizeHtmlText(effects, ok, nok) {
effects.consume(code);
return instruction
}
+ /** @type {State} */
function instructionClose(code) {
return code === 62 ? end(code) : instruction(code)
}
+ /** @type {State} */
function tagCloseStart(code) {
- if (asciiAlpha$1(code)) {
+ if (asciiAlpha(code)) {
effects.consume(code);
return tagClose
}
return nok(code)
}
+ /** @type {State} */
function tagClose(code) {
- if (code === 45 || asciiAlphanumeric$1(code)) {
+ if (code === 45 || asciiAlphanumeric(code)) {
effects.consume(code);
return tagClose
}
return tagCloseBetween(code)
}
+ /** @type {State} */
function tagCloseBetween(code) {
- if (markdownLineEnding$3(code)) {
+ if (markdownLineEnding(code)) {
returnState = tagCloseBetween;
return atLineEnding(code)
}
- if (markdownSpace$3(code)) {
+ if (markdownSpace(code)) {
effects.consume(code);
return tagCloseBetween
}
return end(code)
}
+ /** @type {State} */
function tagOpen(code) {
- if (code === 45 || asciiAlphanumeric$1(code)) {
+ if (code === 45 || asciiAlphanumeric(code)) {
effects.consume(code);
return tagOpen
}
- if (code === 47 || code === 62 || markdownLineEndingOrSpace$2(code)) {
+ if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {
return tagOpenBetween(code)
}
return nok(code)
}
+ /** @type {State} */
function tagOpenBetween(code) {
if (code === 47) {
@@ -36967,23 +40074,24 @@ function tokenizeHtmlText(effects, ok, nok) {
return end
}
- if (code === 58 || code === 95 || asciiAlpha$1(code)) {
+ if (code === 58 || code === 95 || asciiAlpha(code)) {
effects.consume(code);
return tagOpenAttributeName
}
- if (markdownLineEnding$3(code)) {
+ if (markdownLineEnding(code)) {
returnState = tagOpenBetween;
return atLineEnding(code)
}
- if (markdownSpace$3(code)) {
+ if (markdownSpace(code)) {
effects.consume(code);
return tagOpenBetween
}
return end(code)
}
+ /** @type {State} */
function tagOpenAttributeName(code) {
if (
@@ -36991,7 +40099,7 @@ function tokenizeHtmlText(effects, ok, nok) {
code === 46 ||
code === 58 ||
code === 95 ||
- asciiAlphanumeric$1(code)
+ asciiAlphanumeric(code)
) {
effects.consume(code);
return tagOpenAttributeName
@@ -36999,6 +40107,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return tagOpenAttributeNameAfter(code)
}
+ /** @type {State} */
function tagOpenAttributeNameAfter(code) {
if (code === 61) {
@@ -37006,18 +40115,19 @@ function tokenizeHtmlText(effects, ok, nok) {
return tagOpenAttributeValueBefore
}
- if (markdownLineEnding$3(code)) {
+ if (markdownLineEnding(code)) {
returnState = tagOpenAttributeNameAfter;
return atLineEnding(code)
}
- if (markdownSpace$3(code)) {
+ if (markdownSpace(code)) {
effects.consume(code);
return tagOpenAttributeNameAfter
}
return tagOpenBetween(code)
}
+ /** @type {State} */
function tagOpenAttributeValueBefore(code) {
if (
@@ -37036,12 +40146,12 @@ function tokenizeHtmlText(effects, ok, nok) {
return tagOpenAttributeValueQuoted
}
- if (markdownLineEnding$3(code)) {
+ if (markdownLineEnding(code)) {
returnState = tagOpenAttributeValueBefore;
return atLineEnding(code)
}
- if (markdownSpace$3(code)) {
+ if (markdownSpace(code)) {
effects.consume(code);
return tagOpenAttributeValueBefore
}
@@ -37050,6 +40160,7 @@ function tokenizeHtmlText(effects, ok, nok) {
marker = undefined;
return tagOpenAttributeValueUnquoted
}
+ /** @type {State} */
function tagOpenAttributeValueQuoted(code) {
if (code === marker) {
@@ -37061,7 +40172,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return nok(code)
}
- if (markdownLineEnding$3(code)) {
+ if (markdownLineEnding(code)) {
returnState = tagOpenAttributeValueQuoted;
return atLineEnding(code)
}
@@ -37069,14 +40180,16 @@ function tokenizeHtmlText(effects, ok, nok) {
effects.consume(code);
return tagOpenAttributeValueQuoted
}
+ /** @type {State} */
function tagOpenAttributeValueQuotedAfter(code) {
- if (code === 62 || code === 47 || markdownLineEndingOrSpace$2(code)) {
+ if (code === 62 || code === 47 || markdownLineEndingOrSpace(code)) {
return tagOpenBetween(code)
}
return nok(code)
}
+ /** @type {State} */
function tagOpenAttributeValueUnquoted(code) {
if (
@@ -37090,7 +40203,7 @@ function tokenizeHtmlText(effects, ok, nok) {
return nok(code)
}
- if (code === 62 || markdownLineEndingOrSpace$2(code)) {
+ if (code === 62 || markdownLineEndingOrSpace(code)) {
return tagOpenBetween(code)
}
@@ -37099,25 +40212,29 @@ function tokenizeHtmlText(effects, ok, nok) {
} // 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$5(
+ return factorySpace(
effects,
afterPrefix,
'linePrefix',
- self.parser.constructs.disable.null.indexOf('codeIndented') > -1
+ self.parser.constructs.disable.null.includes('codeIndented')
? undefined
: 4
)
}
+ /** @type {State} */
function afterPrefix(code) {
effects.enter('htmlTextData');
return returnState(code)
}
+ /** @type {State} */
function end(code) {
if (code === 62) {
@@ -37131,47 +40248,53 @@ function tokenizeHtmlText(effects, ok, nok) {
}
}
-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').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
+ */
-var labelEnd$3 = {
+/** @type {Construct} */
+const labelEnd = {
name: 'labelEnd',
tokenize: tokenizeLabelEnd,
resolveTo: resolveToLabelEnd,
resolveAll: resolveAllLabelEnd
};
-var resourceConstruct = {
+/** @type {Construct} */
+
+const resourceConstruct = {
tokenize: tokenizeResource
};
-var fullReferenceConstruct = {
+/** @type {Construct} */
+
+const fullReferenceConstruct = {
tokenize: tokenizeFullReference
};
-var collapsedReferenceConstruct = {
+/** @type {Construct} */
+
+const collapsedReferenceConstruct = {
tokenize: tokenizeCollapsedReference
};
+/** @type {Resolver} */
function resolveAllLabelEnd(events) {
- var index = -1;
- var token;
+ let index = -1;
+ /** @type {Token} */
+
+ let token;
while (++index < events.length) {
token = events[index][1];
if (
- !token._used &&
- (token.type === 'labelImage' ||
- token.type === 'labelLink' ||
- token.type === 'labelEnd')
+ token.type === 'labelImage' ||
+ token.type === 'labelLink' ||
+ token.type === 'labelEnd'
) {
// Remove the marker.
events.splice(index + 1, token.type === 'labelImage' ? 4 : 2);
@@ -37182,17 +40305,23 @@ function resolveAllLabelEnd(events) {
return events
}
+/** @type {Resolver} */
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.
+ let index = events.length;
+ let offset = 0;
+ /** @type {Token} */
+
+ let token;
+ /** @type {number|undefined} */
+
+ let open;
+ /** @type {number|undefined} */
+
+ let close;
+ /** @type {Event[]} */
+
+ let media; // Find an opening.
while (index--) {
token = events[index][1];
@@ -37228,58 +40357,63 @@ function resolveToLabelEnd(events, context) {
}
}
- group = {
+ const 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: Object.assign({}, events[open][1].start),
+ end: Object.assign({}, events[events.length - 1][1].end)
};
- label = {
+ const label = {
type: 'label',
- start: shallow$1(events[open][1].start),
- end: shallow$1(events[close][1].end)
+ start: Object.assign({}, events[open][1].start),
+ end: Object.assign({}, events[close][1].end)
};
- text = {
+ const text = {
type: 'labelText',
- start: shallow$1(events[open + offset + 2][1].end),
- end: shallow$1(events[close - 2][1].start)
+ 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.
- media = chunkedPush(media, events.slice(open + 1, open + offset + 3)); // Text open.
+ media = push(media, events.slice(open + 1, open + offset + 3)); // Text open.
- media = chunkedPush(media, [['enter', text, context]]); // Between.
+ media = push(media, [['enter', text, context]]); // Between.
- media = chunkedPush(
+ media = push(
media,
- resolveAll$1(
+ resolveAll(
context.parser.constructs.insideSpan.null,
events.slice(open + offset + 4, close - 3),
context
)
); // Text close, marker close, label close.
- media = chunkedPush(media, [
+ media = push(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 = push(media, events.slice(close + 1)); // Media close.
- media = chunkedPush(media, [['exit', group, context]]);
- chunkedSplice(events, open, events.length, media);
+ media = push(media, [['exit', group, context]]);
+ splice(events, open, events.length, media);
return events
}
+/** @type {Tokenizer} */
function tokenizeLabelEnd(effects, ok, nok) {
- var self = this;
- var index = self.events.length;
- var labelStart;
- var defined; // Find an opening.
+ const self = this;
+ let index = self.events.length;
+ /** @type {Token} */
+
+ let labelStart;
+ /** @type {boolean} */
+
+ let defined; // Find an opening.
while (index--) {
if (
@@ -37293,6 +40427,7 @@ function tokenizeLabelEnd(effects, ok, nok) {
}
return start
+ /** @type {State} */
function start(code) {
if (!labelStart) {
@@ -37300,15 +40435,14 @@ function tokenizeLabelEnd(effects, ok, nok) {
} // 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;
+ defined = self.parser.defined.includes(
+ normalizeIdentifier(
+ self.sliceSerialize({
+ start: labelStart.end,
+ end: self.now()
+ })
+ )
+ );
effects.enter('labelEnd');
effects.enter('labelMarker');
effects.consume(code);
@@ -37316,6 +40450,7 @@ function tokenizeLabelEnd(effects, ok, nok) {
effects.exit('labelEnd');
return afterLabelEnd
}
+ /** @type {State} */
function afterLabelEnd(code) {
// Resource: `[asd](fgh)`.
@@ -37339,15 +40474,18 @@ function tokenizeLabelEnd(effects, ok, nok) {
return defined ? ok(code) : balanced(code)
}
+ /** @type {State} */
function balanced(code) {
labelStart._balanced = true;
return nok(code)
}
}
+/** @type {Tokenizer} */
function tokenizeResource(effects, ok, nok) {
return start
+ /** @type {State} */
function start(code) {
effects.enter('resource');
@@ -37356,6 +40494,7 @@ function tokenizeResource(effects, ok, nok) {
effects.exit('resourceMarker');
return factoryWhitespace(effects, open)
}
+ /** @type {State} */
function open(code) {
if (code === 41) {
@@ -37374,12 +40513,14 @@ function tokenizeResource(effects, ok, nok) {
3
)(code)
}
+ /** @type {State} */
function destinationAfter(code) {
- return markdownLineEndingOrSpace$1(code)
+ return markdownLineEndingOrSpace(code)
? factoryWhitespace(effects, between)(code)
: end(code)
}
+ /** @type {State} */
function between(code) {
if (code === 34 || code === 39 || code === 40) {
@@ -37395,6 +40536,7 @@ function tokenizeResource(effects, ok, nok) {
return end(code)
}
+ /** @type {State} */
function end(code) {
if (code === 41) {
@@ -37408,10 +40550,12 @@ function tokenizeResource(effects, ok, nok) {
return nok(code)
}
}
+/** @type {Tokenizer} */
function tokenizeFullReference(effects, ok, nok) {
- var self = this;
+ const self = this;
return start
+ /** @type {State} */
function start(code) {
return factoryLabel.call(
@@ -37424,20 +40568,23 @@ function tokenizeFullReference(effects, ok, nok) {
'referenceString'
)(code)
}
+ /** @type {State} */
function afterLabel(code) {
- return self.parser.defined.indexOf(
- normalizeIdentifier$2(
+ return self.parser.defined.includes(
+ normalizeIdentifier(
self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)
)
- ) < 0
- ? nok(code)
- : ok(code)
+ )
+ ? ok(code)
+ : nok(code)
}
}
+/** @type {Tokenizer} */
function tokenizeCollapsedReference(effects, ok, nok) {
return start
+ /** @type {State} */
function start(code) {
effects.enter('reference');
@@ -37446,6 +40593,7 @@ function tokenizeCollapsedReference(effects, ok, nok) {
effects.exit('referenceMarker');
return open
}
+ /** @type {State} */
function open(code) {
if (code === 93) {
@@ -37460,19 +40608,24 @@ function tokenizeCollapsedReference(effects, ok, nok) {
}
}
-var labelEnd_1 = labelEnd$3;
-
-var labelEnd$2 = labelEnd_1;
+/**
+ * @typedef {import('micromark-util-types').Construct} Construct
+ * @typedef {import('micromark-util-types').Tokenizer} Tokenizer
+ * @typedef {import('micromark-util-types').State} State
+ */
+/** @type {Construct} */
-var labelStartImage$1 = {
+const labelStartImage = {
name: 'labelStartImage',
tokenize: tokenizeLabelStartImage,
- resolveAll: labelEnd$2.resolveAll
+ resolveAll: labelEnd.resolveAll
};
+/** @type {Tokenizer} */
function tokenizeLabelStartImage(effects, ok, nok) {
- var self = this;
+ const self = this;
return start
+ /** @type {State} */
function start(code) {
effects.enter('labelImage');
@@ -37481,6 +40634,7 @@ function tokenizeLabelStartImage(effects, ok, nok) {
effects.exit('labelImageMarker');
return open
}
+ /** @type {State} */
function open(code) {
if (code === 91) {
@@ -37493,31 +40647,36 @@ function tokenizeLabelStartImage(effects, ok, nok) {
return nok(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)
+ /* Hidden footnotes hook */
+
+ /* c8 ignore next 3 */
+ return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs
+ ? nok(code)
: ok(code)
}
}
-var labelStartImage_1 = labelStartImage$1;
-
-var labelEnd$1 = labelEnd_1;
+/**
+ * @typedef {import('micromark-util-types').Construct} Construct
+ * @typedef {import('micromark-util-types').Tokenizer} Tokenizer
+ * @typedef {import('micromark-util-types').State} State
+ */
+/** @type {Construct} */
-var labelStartLink$1 = {
+const labelStartLink = {
name: 'labelStartLink',
tokenize: tokenizeLabelStartLink,
- resolveAll: labelEnd$1.resolveAll
+ resolveAll: labelEnd.resolveAll
};
+/** @type {Tokenizer} */
function tokenizeLabelStartLink(effects, ok, nok) {
- var self = this;
+ const self = this;
return start
+ /** @type {State} */
function start(code) {
effects.enter('labelLink');
@@ -37527,59 +40686,71 @@ function tokenizeLabelStartLink(effects, ok, nok) {
effects.exit('labelLink');
return after
}
+ /** @type {State} */
function after(code) {
- /* c8 ignore next */
- return code === 94 &&
- /* c8 ignore next */
- '_hiddenFootnoteSupport' in self.parser.constructs
- ? /* c8 ignore next */
- nok(code)
+ /* Hidden footnotes hook. */
+
+ /* c8 ignore next 3 */
+ return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs
+ ? nok(code)
: ok(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
+ */
-var lineEnding$1 = {
+/** @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$4(effects, ok, 'linePrefix')
+ return factorySpace(effects, ok, 'linePrefix')
}
}
-var lineEnding_1 = lineEnding$1;
-
-var markdownLineEnding$2 = markdownLineEnding_1;
-var markdownSpace$2 = markdownSpace_1;
-var factorySpace$3 = 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 thematicBreak$3 = {
+/** @type {Construct} */
+const thematicBreak$1 = {
name: 'thematicBreak',
tokenize: tokenizeThematicBreak
};
+/** @type {Tokenizer} */
function tokenizeThematicBreak(effects, ok, nok) {
- var size = 0;
- var marker;
+ let size = 0;
+ /** @type {NonNullable<Code>} */
+
+ let marker;
return start
+ /** @type {State} */
function start(code) {
effects.enter('thematicBreak');
marker = code;
return atBreak(code)
}
+ /** @type {State} */
function atBreak(code) {
if (code === marker) {
@@ -37587,17 +40758,18 @@ function tokenizeThematicBreak(effects, ok, nok) {
return sequence(code)
}
- if (markdownSpace$2(code)) {
- return factorySpace$3(effects, atBreak, 'whitespace')(code)
+ if (markdownSpace(code)) {
+ return factorySpace(effects, atBreak, 'whitespace')(code)
}
- if (size < 3 || (code !== null && !markdownLineEnding$2(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) {
@@ -37611,17 +40783,17 @@ function tokenizeThematicBreak(effects, ok, nok) {
}
}
-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;
+/**
+ * @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} */
-var list$2 = {
+const list$1 = {
name: 'list',
tokenize: tokenizeListStart,
continuation: {
@@ -37629,23 +40801,36 @@ var list$2 = {
},
exit: tokenizeListEnd
};
-var listItemPrefixWhitespaceConstruct = {
+/** @type {Construct} */
+
+const listItemPrefixWhitespaceConstruct = {
tokenize: tokenizeListItemPrefixWhitespace,
partial: true
};
-var indentConstruct = {
+/** @type {Construct} */
+
+const indentConstruct = {
tokenize: tokenizeIndent,
partial: true
};
+/**
+ * @type {Tokenizer}
+ * @this {TokenizeContextWithState}
+ */
function tokenizeListStart(effects, ok, nok) {
- var self = this;
- var initialSize = prefixSize(self.events, 'linePrefix');
- var size = 0;
+ 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} */
function start(code) {
- var kind =
+ const kind =
self.containerState.type ||
(code === 42 || code === 43 || code === 45
? 'listUnordered'
@@ -37654,7 +40839,7 @@ function tokenizeListStart(effects, ok, nok) {
if (
kind === 'listUnordered'
? !self.containerState.marker || code === self.containerState.marker
- : asciiDigit$1(code)
+ : asciiDigit(code)
) {
if (!self.containerState.type) {
self.containerState.type = kind;
@@ -37666,7 +40851,7 @@ function tokenizeListStart(effects, ok, nok) {
if (kind === 'listUnordered') {
effects.enter('listItemPrefix');
return code === 42 || code === 45
- ? effects.check(thematicBreak$2, nok, atMarker)(code)
+ ? effects.check(thematicBreak$1, nok, atMarker)(code)
: atMarker(code)
}
@@ -37679,9 +40864,10 @@ function tokenizeListStart(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function inside(code) {
- if (asciiDigit$1(code) && ++size < 10) {
+ if (asciiDigit(code) && ++size < 10) {
effects.consume(code);
return inside
}
@@ -37698,6 +40884,9 @@ function tokenizeListStart(effects, ok, nok) {
return nok(code)
}
+ /**
+ * @type {State}
+ **/
function atMarker(code) {
effects.enter('listItemMarker');
@@ -37705,7 +40894,7 @@ function tokenizeListStart(effects, ok, nok) {
effects.exit('listItemMarker');
self.containerState.marker = self.containerState.marker || code;
return effects.check(
- partialBlankLine, // Can’t be empty when interrupting.
+ blankLine, // Can’t be empty when interrupting.
self.interrupt ? nok : onBlank,
effects.attempt(
listItemPrefixWhitespaceConstruct,
@@ -37714,15 +40903,17 @@ function tokenizeListStart(effects, ok, nok) {
)
)
}
+ /** @type {State} */
function onBlank(code) {
self.containerState.initialBlankLine = true;
initialSize++;
return endOfPrefix(code)
}
+ /** @type {State} */
function otherPrefix(code) {
- if (markdownSpace$1(code)) {
+ if (markdownSpace(code)) {
effects.enter('listItemPrefixWhitespace');
effects.consume(code);
effects.exit('listItemPrefixWhitespace');
@@ -37731,18 +40922,25 @@ function tokenizeListStart(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function endOfPrefix(code) {
self.containerState.size =
- initialSize + sizeChunks(self.sliceStream(effects.exit('listItemPrefix')));
+ initialSize +
+ self.sliceSerialize(effects.exit('listItemPrefix'), true).length;
return ok(code)
}
}
+/**
+ * @type {Tokenizer}
+ * @this {TokenizeContextWithState}
+ */
function tokenizeListContinuation(effects, ok, nok) {
- var self = this;
+ const self = this;
self.containerState._closeFlow = undefined;
- return effects.check(partialBlankLine, onBlank, notBlank)
+ return effects.check(blankLine, onBlank, notBlank)
+ /** @type {State} */
function onBlank(code) {
self.containerState.furtherBlankLines =
@@ -37750,98 +40948,129 @@ function tokenizeListContinuation(effects, ok, nok) {
self.containerState.initialBlankLine; // We have a blank line.
// Still, try to consume at most the items size.
- return factorySpace$2(
+ return factorySpace(
effects,
ok,
'listItemIndent',
self.containerState.size + 1
)(code)
}
+ /** @type {State} */
function notBlank(code) {
- if (self.containerState.furtherBlankLines || !markdownSpace$1(code)) {
- self.containerState.furtherBlankLines = self.containerState.initialBlankLine = undefined;
+ if (self.containerState.furtherBlankLines || !markdownSpace(code)) {
+ self.containerState.furtherBlankLines = undefined;
+ self.containerState.initialBlankLine = undefined;
return notInCurrentItem(code)
}
- self.containerState.furtherBlankLines = self.containerState.initialBlankLine = undefined;
+ self.containerState.furtherBlankLines = undefined;
+ self.containerState.initialBlankLine = undefined;
return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)
}
+ /** @type {State} */
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(
+ return factorySpace(
effects,
- effects.attempt(list$2, ok, nok),
+ effects.attempt(list$1, ok, nok),
'linePrefix',
- self.parser.constructs.disable.null.indexOf('codeIndented') > -1
+ self.parser.constructs.disable.null.includes('codeIndented')
? undefined
: 4
)(code)
}
}
+/**
+ * @type {Tokenizer}
+ * @this {TokenizeContextWithState}
+ */
function tokenizeIndent(effects, ok, nok) {
- var self = this;
- return factorySpace$2(
+ const self = this;
+ return factorySpace(
effects,
afterPrefix,
'listItemIndent',
self.containerState.size + 1
)
+ /** @type {State} */
function afterPrefix(code) {
- return prefixSize(self.events, 'listItemIndent') ===
- self.containerState.size
+ 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}
+ */
function tokenizeListEnd(effects) {
effects.exit(this.containerState.type);
}
+/**
+ * @type {Tokenizer}
+ * @this {TokenizeContextWithState}
+ */
function tokenizeListItemPrefixWhitespace(effects, ok, nok) {
- var self = this;
- return factorySpace$2(
+ const self = this;
+ return factorySpace(
effects,
afterPrefix,
'listItemPrefixWhitespace',
- self.parser.constructs.disable.null.indexOf('codeIndented') > -1
+ self.parser.constructs.disable.null.includes('codeIndented')
? undefined
: 4 + 1
)
+ /** @type {State} */
function afterPrefix(code) {
- return markdownSpace$1(code) ||
- !prefixSize(self.events, 'listItemPrefixWhitespace')
- ? nok(code)
- : ok(code)
+ const tail = self.events[self.events.length - 1];
+ return !markdownSpace(code) &&
+ tail &&
+ tail[1].type === 'listItemPrefixWhitespace'
+ ? ok(code)
+ : 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').Resolver} Resolver
+ * @typedef {import('micromark-util-types').Tokenizer} Tokenizer
+ * @typedef {import('micromark-util-types').State} State
+ * @typedef {import('micromark-util-types').Code} Code
+ */
-var setextUnderline$1 = {
+/** @type {Construct} */
+const setextUnderline = {
name: 'setextUnderline',
tokenize: tokenizeSetextUnderline,
resolveTo: resolveToSetextUnderline
};
+/** @type {Resolver} */
function resolveToSetextUnderline(events, context) {
- var index = events.length;
- var content;
- var text;
- var definition;
- var heading; // Find the opening of the content.
+ let index = events.length;
+ /** @type {number|undefined} */
+
+ let content;
+ /** @type {number|undefined} */
+
+ let text;
+ /** @type {number|undefined} */
+
+ let definition; // Find the opening of the content.
// It’ll always exist: we don’t tokenize if it isn’t there.
while (index--) {
@@ -37867,10 +41096,10 @@ function resolveToSetextUnderline(events, context) {
}
}
- heading = {
+ const heading = {
type: 'setextHeading',
- start: shallow(events[text][1].start),
- end: shallow(events[events.length - 1][1].end)
+ start: Object.assign({}, events[text][1].start),
+ end: Object.assign({}, 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,
@@ -37879,7 +41108,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(events[definition][1].end);
+ events[content][1].end = Object.assign({}, events[definition][1].end);
} else {
events[content][1] = heading;
} // Add the heading exit at the end.
@@ -37887,12 +41116,17 @@ function resolveToSetextUnderline(events, context) {
events.push(['exit', heading, context]);
return events
}
+/** @type {Tokenizer} */
function tokenizeSetextUnderline(effects, ok, nok) {
- var self = this;
- var index = self.events.length;
- var marker;
- var paragraph; // Find an opening.
+ const self = this;
+ let index = self.events.length;
+ /** @type {NonNullable<Code>} */
+
+ let marker;
+ /** @type {boolean} */
+
+ let paragraph; // Find an opening.
while (index--) {
// Skip enter/exit of line ending, line prefix, and content.
@@ -37908,9 +41142,10 @@ function tokenizeSetextUnderline(effects, ok, nok) {
}
return start
+ /** @type {State} */
function start(code) {
- if (!self.lazy && (self.interrupt || paragraph)) {
+ if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {
effects.enter('setextHeadingLine');
effects.enter('setextHeadingLineSequence');
marker = code;
@@ -37919,6 +41154,7 @@ function tokenizeSetextUnderline(effects, ok, nok) {
return nok(code)
}
+ /** @type {State} */
function closingSequence(code) {
if (code === marker) {
@@ -37927,11 +41163,12 @@ function tokenizeSetextUnderline(effects, ok, nok) {
}
effects.exit('setextHeadingLineSequence');
- return factorySpace$1(effects, closingSequenceEnd, 'lineSuffix')(code)
+ return factorySpace(effects, closingSequenceEnd, 'lineSuffix')(code)
}
+ /** @type {State} */
function closingSequenceEnd(code) {
- if (code === null || markdownLineEnding$1(code)) {
+ if (code === null || markdownLineEnding(code)) {
effects.exit('setextHeadingLine');
return ok(code)
}
@@ -37940,185 +41177,1037 @@ function tokenizeSetextUnderline(effects, ok, nok) {
}
}
-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
+/**
+ * @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
};
-var insideSpan = {
- null: [attention, text$1$1.resolver]
+/** @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
+ }
+
+ effects.enter('lineEndingBlank');
+ effects.consume(code);
+ effects.exit('lineEndingBlank');
+ self.currentConstruct = undefined;
+ return initial
+ }
+ /** @type {State} */
+
+ function afterConstruct(code) {
+ if (code === null) {
+ effects.consume(code);
+ return
+ }
+
+ effects.enter('lineEnding');
+ effects.consume(code);
+ effects.exit('lineEnding');
+ self.currentConstruct = undefined;
+ return initial
+ }
+}
+
+/**
+ * @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()
};
-var disable = {
+const string$1 = initializeFactory('string');
+const text$3 = initializeFactory('text');
+/**
+ * @param {'string'|'text'} field
+ * @returns {InitialConstruct}
+ */
+
+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
+ }
+ /**
+ * @param {Code} code
+ * @returns {boolean}
+ */
+
+ function atBreak(code) {
+ if (code === null) {
+ return 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
+ }
+ }
+ }
+
+ return false
+ }
+ }
+}
+/**
+ * @param {Resolver} [extraResolver]
+ * @returns {Resolver}
+ */
+
+function createResolver(extraResolver) {
+ return resolveAllText
+ /** @type {Resolver} */
+
+ function resolveAllText(events, context) {
+ let index = -1;
+ /** @type {number|undefined} */
+
+ let enter; // A rather boring computation (to merge adjacent `data` events) which
+ // improves mm performance by 29%.
+
+ 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;
+ }
+
+ enter = undefined;
+ }
+ }
+
+ 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?)
+ *
+ * @type {Resolver}
+ */
+
+function resolveAllLineSuffixes(events, context) {
+ let eventIndex = -1;
+
+ 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} */
+
+ let tabs;
+
+ while (index--) {
+ const chunk = chunks[index];
+
+ if (typeof chunk === 'string') {
+ bufferIndex = chunk.length;
+
+ 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 events
+}
+
+/**
+ * @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<Point, '_index'|'_bufferIndex'>} [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<string, number>} */
+
+ const columnStart = {};
+ /** @type {Construct[]} */
+
+ const resolveAllConstructs = [];
+ /** @type {Chunk[]} */
+
+ let chunks = [];
+ /** @type {Token[]} */
+
+ let stack = [];
+ /**
+ * Tools used for tokenizing.
+ *
+ * @type {Effects}
+ */
+
+ 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}
+ */
+
+ const context = {
+ previous: null,
+ code: null,
+ containerState: {},
+ events: [],
+ parser,
+ sliceStream,
+ sliceSerialize,
+ now,
+ defineSkip,
+ write
+ };
+ /**
+ * The state function.
+ *
+ * @type {State|void}
+ */
+
+ let state = initialize.tokenize.call(context, effects);
+
+ if (initialize.resolveAll) {
+ resolveAllConstructs.push(initialize);
+ }
+
+ return context
+ /** @type {TokenizeContext['write']} */
+
+ function write(slice) {
+ chunks = push(chunks, slice);
+ main(); // Exit if we’re not done, resolve might change stuff.
+
+ if (chunks[chunks.length - 1] !== null) {
+ return []
+ }
+
+ addResult(initialize, 0); // Otherwise, resolve, and exit.
+
+ context.events = resolveAll(resolveAllConstructs, context.events, context);
+ return context.events
+ } //
+ // Tools.
+ //
+
+ /** @type {TokenizeContext['sliceSerialize']} */
+
+ function sliceSerialize(token, expandTabs) {
+ return serializeChunks(sliceStream(token), expandTabs)
+ }
+ /** @type {TokenizeContext['sliceStream']} */
+
+ function sliceStream(token) {
+ return sliceChunks(chunks, token)
+ }
+ /** @type {TokenizeContext['now']} */
+
+ function now() {
+ return Object.assign({}, point)
+ }
+ /** @type {TokenizeContext['defineSkip']} */
+
+ function defineSkip(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.
+ *
+ * @returns {void}
+ */
+
+ function main() {
+ /** @type {number} */
+ let chunkIndex;
+
+ while (point._index < chunks.length) {
+ const chunk = chunks[point._index]; // If we’re in a buffer chunk, loop through it.
+
+ if (typeof chunk === 'string') {
+ chunkIndex = point._index;
+
+ if (point._bufferIndex < 0) {
+ point._bufferIndex = 0;
+ }
+
+ while (
+ point._index === chunkIndex &&
+ point._bufferIndex < chunk.length
+ ) {
+ go(chunk.charCodeAt(point._bufferIndex));
+ }
+ } else {
+ go(chunk);
+ }
+ }
+ }
+ /**
+ * Deal with one code.
+ *
+ * @param {Code} code
+ * @returns {void}
+ */
+
+ 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
+ }
+ /**
+ * Use results.
+ *
+ * @type {ReturnHandle}
+ */
+
+ function onsuccessfulconstruct(construct, info) {
+ addResult(construct, info.from);
+ }
+ /**
+ * Discard results.
+ *
+ * @type {ReturnHandle}
+ */
+
+ function onsuccessfulcheck(_, info) {
+ info.restore();
+ }
+ /**
+ * Factory to attempt/check/interrupt.
+ *
+ * @param {ReturnHandle} onreturn
+ * @param {Record<string, unknown>} [fields]
+ */
+
+ 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}
+ */
+
+ function hook(constructs, returnState, bogusState) {
+ /** @type {Construct[]} */
+ let listOfConstructs;
+ /** @type {number} */
+
+ let constructIndex;
+ /** @type {Construct} */
+
+ let currentConstruct;
+ /** @type {Info} */
+
+ 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}
+ */
+
+ function handleMapOfConstructs(map) {
+ return start
+ /** @type {State} */
+
+ function start(code) {
+ const def = code !== null && map[code];
+ const all = code !== null && map.null;
+ const list = [
+ // To do: add more extension tests.
+
+ /* 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}
+ */
+
+ function handleListOfConstructs(list) {
+ listOfConstructs = list;
+ constructIndex = 0;
+
+ if (list.length === 0) {
+ return bogusState
+ }
+
+ return handleConstruct(list[constructIndex])
+ }
+ /**
+ * Handle a single construct.
+ *
+ * @param {Construct} construct
+ * @returns {State}
+ */
+
+ function handleConstruct(construct) {
+ return start
+ /** @type {State} */
+
+ 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 (!construct.partial) {
+ context.currentConstruct = construct;
+ }
+
+ if (
+ construct.name &&
+ context.parser.constructs.disable.null.includes(construct.name)
+ ) {
+ return nok()
+ }
+
+ 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} */
+
+ function ok(code) {
+ onreturn(currentConstruct, info);
+ return returnState
+ }
+ /** @type {State} */
+
+ function nok(code) {
+ info.restore();
+
+ if (++constructIndex < listOfConstructs.length) {
+ return handleConstruct(listOfConstructs[constructIndex])
+ }
+
+ return bogusState
+ }
+ }
+ }
+ /**
+ * @param {Construct} construct
+ * @param {number} from
+ * @returns {void}
+ */
+
+ function addResult(construct, from) {
+ if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {
+ resolveAllConstructs.push(construct);
+ }
+
+ if (construct.resolve) {
+ splice(
+ context.events,
+ from,
+ context.events.length - from,
+ construct.resolve(context.events.slice(from), context)
+ );
+ }
+
+ if (construct.resolveTo) {
+ context.events = construct.resolveTo(context.events, context);
+ }
+ }
+ /**
+ * Store state.
+ *
+ * @returns {Info}
+ */
+
+ 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}
+ */
+
+ function restore() {
+ point = startPoint;
+ context.previous = startPrevious;
+ context.currentConstruct = startCurrentConstruct;
+ context.events.length = startEventsIndex;
+ stack = startStack;
+ accountForPotentialSkip();
+ }
+ }
+ /**
+ * Move the current point a bit forward in the line when it’s on a column
+ * skip.
+ *
+ * @returns {void}
+ */
+
+ 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, 'start'|'end'>} token
+ * @returns {Chunk[]}
+ */
+
+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[]} */
+
+ 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);
+ }
+
+ if (endBufferIndex > 0) {
+ // @ts-expect-error `_bufferIndex` is used on string chunks.
+ view.push(chunks[endIndex].slice(0, endBufferIndex));
+ }
+ }
+
+ return view
+}
+/**
+ * Get the string value of a slice of chunks.
+ *
+ * @param {Chunk[]} chunks
+ * @param {boolean} [expandTabs=false]
+ * @returns {string}
+ */
+
+function serializeChunks(chunks, expandTabs) {
+ let index = -1;
+ /** @type {string[]} */
+
+ 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);
+ }
+ }
+
+ 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: []
};
-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 = {
+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: [],
- 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)
+ lazy: {},
+ constructs,
+ content: create(content$1),
+ document: create(document$2),
+ flow: create(flow$1),
+ string: create(string$1),
+ text: create(text$3)
};
return parser
+ /**
+ * @param {InitialConstruct} initial
+ */
- function create(initializer) {
+ function create(initial) {
return creator
+ /** @type {Create} */
function creator(from) {
- return createTokenizer(parser, initializer, from)
+ return createTokenizer(parser, initial, from)
}
}
}
-var parse_1$1 = parse$3;
+/**
+ * @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
+ */
-var search = /[\0\t\n\r]/g;
+/**
+ * @callback Preprocessor
+ * @param {Value} value
+ * @param {Encoding} [encoding]
+ * @param {boolean} [end=false]
+ * @returns {Chunk[]}
+ */
+const search = /[\0\t\n\r]/g;
+/**
+ * @returns {Preprocessor}
+ */
function preprocess() {
- var start = true;
- var column = 1;
- var buffer = '';
- var atCarriageReturn;
+ let column = 1;
+ let buffer = '';
+ /** @type {boolean|undefined} */
+
+ let start = true;
+ /** @type {boolean|undefined} */
+
+ let atCarriageReturn;
return preprocessor
+ /** @type {Preprocessor} */
function preprocessor(value, encoding, end) {
- var chunks = [];
- var match;
- var next;
- var startPosition;
- var endPosition;
- var code;
+ /** @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 = '';
@@ -38134,7 +42223,8 @@ function preprocess() {
while (startPosition < value.length) {
search.lastIndex = startPosition;
match = search.exec(value);
- endPosition = match ? match.index : value.length;
+ endPosition =
+ match && match.index !== undefined ? match.index : value.length;
code = value.charCodeAt(endPosition);
if (!match) {
@@ -38156,21 +42246,32 @@ function preprocess() {
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;
+ switch (code) {
+ case 0: {
+ chunks.push(65533);
+ column++;
+ break
+ }
+
+ 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;
+ }
}
}
@@ -38187,11 +42288,15 @@ function preprocess() {
}
}
-var preprocess_1 = preprocess;
-
-var subtokenize = subtokenize_1;
+/**
+ * @typedef {import('micromark-util-types').Event} Event
+ */
+/**
+ * @param {Event[]} events
+ * @returns {Event[]}
+ */
-function postprocess$1(events) {
+function postprocess(events) {
while (!subtokenize(events)) {
// Empty
}
@@ -38199,4497 +42304,108 @@ function postprocess$1(events) {
return events
}
-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;
+/**
+ * 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);
-var own$8 = {}.hasOwnProperty;
+ 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'
+ }
-function decodeEntity$1(characters) {
- return own$8.call(characterEntities$1, characters)
- ? characterEntities$1[characters]
- : false
+ return String.fromCharCode(code)
}
-var dist = fromMarkdown$1;
-
-// These three are compiled away in the `dist/`
+/**
+ * @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
+ */
-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;
+const fromMarkdown =
+ /**
+ * @type {(
+ * ((value: Value, encoding: Encoding, options?: Options) => Root) &
+ * ((value: Value, options?: Options) => Root)
+ * )}
+ */
-function fromMarkdown$1(value, encoding, options) {
- if (typeof encoding !== 'string') {
- options = encoding;
- encoding = undefined;
- }
+ /**
+ * @param {Value} value
+ * @param {Encoding} [encoding]
+ * @param {Options} [options]
+ * @returns {Root}
+ */
+ function (value, encoding, options) {
+ if (typeof encoding !== 'string') {
+ options = encoding;
+ encoding = undefined;
+ }
- return compiler(options)(
- postprocess(
- parser(options).document().write(preprocessor()(value, encoding, true))
+ return compiler(options)(
+ postprocess(
+ parse(options).document().write(preprocess()(value, encoding, true))
+ )
)
- )
-}
+ };
+/**
+ * Note this compiler only understand complete buffering, not streaming.
+ *
+ * @param {Options} [options]
+ */
-// Note this compiler only understand complete buffering, not streaming.
-function compiler(options) {
- var settings = options || {};
- var config = configure$2(
+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: [
@@ -42699,7 +42415,6 @@ function compiler(options) {
'paragraph',
'strong'
],
-
enter: {
autolink: opener(link),
autolinkProtocol: onenterdata,
@@ -42743,7 +42458,6 @@ function compiler(options) {
strong: opener(strong),
thematicBreak: opener(thematicBreak)
},
-
exit: {
atxHeading: closer(),
atxHeadingSequence: onexitatxheadingsequence,
@@ -42795,34 +42509,46 @@ function compiler(options) {
thematicBreak: closer()
}
},
-
- settings.mdastExtensions || []
+ options.mdastExtensions || []
);
+ /** @type {CompileData} */
- var data = {};
-
+ const data = {};
return compile
+ /**
+ * @param {Array.<Event>} events
+ * @returns {Root}
+ */
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 {Root} */
+ let tree = {
+ type: 'root',
+ children: []
};
+ /** @type {CompileContext['stack']} */
+
+ const stack = [tree];
+ /** @type {CompileContext['tokenStack']} */
+
+ const tokenStack = [];
+ /** @type {Array.<number>} */
+
+ const listStack = [];
+ /** @type {Omit<CompileContext, 'sliceSerialize'>} */
+
+ 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
@@ -42834,8 +42560,8 @@ function compiler(options) {
if (events[index][0] === 'enter') {
listStack.push(index);
} else {
- listStart = listStack.pop(index);
- index = prepareList(events, listStart, index);
+ const tail = listStack.pop();
+ index = prepareList(events, tail, index);
}
}
}
@@ -42843,64 +42569,88 @@ function compiler(options) {
index = -1;
while (++index < events.length) {
- handler = config[events[index][0]];
+ const handler = config[events[index][0]];
- if (own$7.call(handler, events[index][1].type)) {
+ if (own$4.call(handler, events[index][1].type)) {
handler[events[index][1].type].call(
- assign({sliceSerialize: events[index][2].sliceSerialize}, context),
+ Object.assign(
+ {
+ sliceSerialize: events[index][2].sliceSerialize
+ },
+ context
+ ),
events[index][1]
);
}
}
- if (tokenStack.length) {
+ if (tokenStack.length > 0) {
throw new Error(
'Cannot close document, a token (`' +
tokenStack[tokenStack.length - 1].type +
'`, ' +
- stringifyPosition$2({
+ stringifyPosition$1({
start: tokenStack[tokenStack.length - 1].start,
end: tokenStack[tokenStack.length - 1].end
}) +
') is still open'
)
- }
+ } // Figure out `root` position.
- // Figure out `root` position.
tree.position = {
start: point(
- events.length ? events[0][1].start : {line: 1, column: 1, offset: 0}
+ events.length > 0
+ ? events[0][1].start
+ : {
+ line: 1,
+ column: 1,
+ offset: 0
+ }
),
-
end: point(
- events.length
+ events.length > 0
? events[events.length - 2][1].end
- : {line: 1, column: 1, offset: 0}
+ : {
+ line: 1,
+ column: 1,
+ offset: 0
+ }
)
};
-
index = -1;
+
while (++index < config.transforms.length) {
tree = config.transforms[index](tree) || tree;
}
return tree
}
+ /**
+ * @param {Array.<Event>} events
+ * @param {number} start
+ * @param {number} length
+ * @returns {number}
+ */
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 index = start - 1;
+ let containerBalance = -1;
+ let listSpread = false;
+ /** @type {Token|undefined} */
+
+ let listItem;
+ /** @type {number|undefined} */
+
+ let lineIndex;
+ /** @type {number|undefined} */
+
+ let firstBlankLineIndex;
+ /** @type {boolean|undefined} */
+
+ let atMarker;
while (++index <= length) {
- event = events[index];
+ const event = events[index];
if (
event[1].type === 'listUnordered' ||
@@ -42947,11 +42697,11 @@ function compiler(options) {
event[1].type === 'listOrdered'))
) {
if (listItem) {
- tailIndex = index;
+ let tailIndex = index;
lineIndex = undefined;
while (tailIndex--) {
- tailEvent = events[tailIndex];
+ const tailEvent = events[tailIndex];
if (
tailEvent[1].type === 'lineEnding' ||
@@ -42981,26 +42731,26 @@ function compiler(options) {
firstBlankLineIndex &&
(!lineIndex || firstBlankLineIndex < lineIndex)
) {
+ // @ts-expect-error Patched.
listItem._spread = true;
- }
+ } // Fix position.
- // Fix position.
- listItem.end = point(
+ 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.
- // Create a new list item.
if (event[1].type === 'listItemPrefix') {
listItem = {
type: 'listItem',
+ // @ts-expect-error Patched
_spread: false,
- start: point(event[1].start)
- };
+ start: Object.assign({}, event[1].start)
+ }; // @ts-expect-error: `listItem` is most definitely defined, TS...
events.splice(index, 0, ['enter', listItem, event[2]]);
index++;
@@ -43009,64 +42759,124 @@ function compiler(options) {
atMarker = true;
}
}
- }
+ } // @ts-expect-error Patched.
events[start][1]._spread = listSpread;
return length
}
+ /**
+ * @type {CompileContext['setData']}
+ * @param [value]
+ */
function setData(key, value) {
data[key] = value;
}
+ /**
+ * @type {CompileContext['getData']}
+ * @template {string} K
+ * @param {K} key
+ * @returns {CompileData[K]}
+ */
function getData(key) {
return data[key]
}
+ /**
+ * @param {Point} d
+ * @returns {Point}
+ */
function point(d) {
- return {line: d.line, column: d.column, offset: d.offset}
+ return {
+ line: d.line,
+ column: d.column,
+ offset: d.offset
+ }
}
+ /**
+ * @param {(token: Token) => Node} create
+ * @param {Handle} [and]
+ * @returns {Handle}
+ */
function opener(create, and) {
return open
+ /**
+ * @this {CompileContext}
+ * @param {Token} token
+ * @returns {void}
+ */
function open(token) {
enter.call(this, create(token), token);
if (and) and.call(this, token);
}
}
+ /** @type {CompileContext['buffer']} */
function buffer() {
- this.stack.push({type: 'fragment', children: []});
+ // @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}
+ */
function enter(node, token) {
- this.stack[this.stack.length - 1].children.push(node);
+ /** @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);
- node.position = {start: point(token.start)};
+ this.tokenStack.push(token); // @ts-expect-error: `end` will be patched later.
+
+ node.position = {
+ start: point(token.start)
+ };
return node
}
+ /**
+ * @param {Handle} [and]
+ * @returns {Handle}
+ */
function closer(and) {
return close
+ /**
+ * @this {CompileContext}
+ * @param {Token} token
+ * @returns {void}
+ */
function close(token) {
if (and) and.call(this, token);
exit.call(this, token);
}
}
+ /** @type {CompileContext['exit']} */
function exit(token) {
- var node = this.stack.pop();
- var open = this.tokenStack.pop();
+ const node = this.stack.pop();
+ const open = this.tokenStack.pop();
if (!open) {
throw new Error(
'Cannot close `' +
token.type +
'` (' +
- stringifyPosition$2({start: token.start, end: token.end}) +
+ stringifyPosition$1({
+ start: token.start,
+ end: token.end
+ }) +
'): it’s not open'
)
} else if (open.type !== token.type) {
@@ -43074,11 +42884,17 @@ function compiler(options) {
'Cannot close `' +
token.type +
'` (' +
- stringifyPosition$2({start: token.start, end: token.end}) +
+ stringifyPosition$1({
+ start: token.start,
+ end: token.end
+ }) +
'): a different token (`' +
open.type +
'`, ' +
- stringifyPosition$2({start: open.start, end: open.end}) +
+ stringifyPosition$1({
+ start: open.start,
+ end: open.end
+ }) +
') is open'
)
}
@@ -43086,39 +42902,46 @@ function compiler(options) {
node.position.end = point(token.end);
return node
}
+ /**
+ * @this {CompileContext}
+ * @returns {string}
+ */
function resume() {
- return toString$4(this.stack.pop())
- }
-
- //
+ 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 = parseInt(
+ this.stack[this.stack.length - 2].start = Number.parseInt(
this.sliceSerialize(token),
10
);
-
setData('expectingFirstListItemValue');
}
}
+ /** @type {Handle} */
function onexitcodefencedfenceinfo() {
- var data = this.resume();
+ const data = this.resume();
this.stack[this.stack.length - 1].lang = data;
}
+ /** @type {Handle} */
function onexitcodefencedfencemeta() {
- var data = this.resume();
+ const data = this.resume();
this.stack[this.stack.length - 1].meta = data;
}
+ /** @type {Handle} */
function onexitcodefencedfence() {
// Exit if this is the closing fence.
@@ -43126,127 +42949,149 @@ function compiler(options) {
this.buffer();
setData('flowCodeInside', true);
}
+ /** @type {Handle} */
function onexitcodefenced() {
- var data = this.resume();
+ const data = this.resume();
this.stack[this.stack.length - 1].value = data.replace(
/^(\r?\n|\r)|(\r?\n|\r)$/g,
''
);
-
setData('flowCodeInside');
}
+ /** @type {Handle} */
function onexitcodeindented() {
- var data = this.resume();
- this.stack[this.stack.length - 1].value = data;
+ 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.
- var label = this.resume();
+ const 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(
this.sliceSerialize(token)
).toLowerCase();
}
+ /** @type {Handle} */
function onexitdefinitiontitlestring() {
- var data = this.resume();
+ const data = this.resume();
this.stack[this.stack.length - 1].title = data;
}
+ /** @type {Handle} */
function onexitdefinitiondestinationstring() {
- var data = this.resume();
+ 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;
+ this.stack[this.stack.length - 1].depth =
+ this.sliceSerialize(token).length;
}
}
+ /** @type {Handle} */
function onexitsetextheadingtext() {
setData('setextHeadingSlurpLineEnding', true);
}
+ /** @type {Handle} */
function onexitsetextheadinglinesequence(token) {
this.stack[this.stack.length - 1].depth =
this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2;
}
+ /** @type {Handle} */
function onexitsetextheading() {
setData('setextHeadingSlurpLineEnding');
}
+ /** @type {Handle} */
function onenterdata(token) {
- var siblings = this.stack[this.stack.length - 1].children;
- var tail = siblings[siblings.length - 1];
+ /** @type {Parent} */
+ // @ts-expect-error: assume parent.
+ const parent = this.stack[this.stack.length - 1];
+ /** @type {Node} */
+ // @ts-expect-error: assume child.
+
+ let tail = parent.children[parent.children.length - 1];
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);
+ tail = text(); // @ts-expect-error: we’ll add `end` later.
+
+ tail.position = {
+ start: point(token.start)
+ };
+ parent.children.push(tail);
}
this.stack.push(tail);
}
+ /** @type {Handle} */
function onexitdata(token) {
- var tail = this.stack.pop();
+ const tail = this.stack.pop();
tail.value += this.sliceSerialize(token);
tail.position.end = point(token.end);
}
+ /** @type {Handle} */
function onexitlineending(token) {
- var context = this.stack[this.stack.length - 1];
+ /** @type {Parent} */
+ // @ts-expect-error: supposed to be a parent.
+ const 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
- );
-
+ const tail = context.children[context.children.length - 1];
+ tail.position.end = point(token.end);
setData('atHardBreak');
return
}
if (
!getData('setextHeadingSlurpLineEnding') &&
- config.canContainEols.indexOf(context.type) > -1
+ config.canContainEols.includes(context.type)
) {
onenterdata.call(this, token);
onexitdata.call(this, token);
}
}
+ /** @type {Handle} */
function onexithardbreak() {
setData('atHardBreak', true);
}
+ /** @type {Handle} */
function onexithtmlflow() {
- var data = this.resume();
+ const data = this.resume();
this.stack[this.stack.length - 1].value = data;
}
+ /** @type {Handle} */
function onexithtmltext() {
- var data = this.resume();
+ const data = this.resume();
this.stack[this.stack.length - 1].value = data;
}
+ /** @type {Handle} */
function onexitcodetext() {
- var data = this.resume();
+ const data = this.resume();
this.stack[this.stack.length - 1].value = data;
}
+ /** @type {Handle} */
function onexitlink() {
- var context = this.stack[this.stack.length - 1];
+ const context = this.stack[this.stack.length - 1]; // To do: clean.
- // To do: clean.
if (getData('inReference')) {
context.type += 'Reference';
context.referenceType = getData('referenceType') || 'shortcut';
@@ -43260,11 +43105,11 @@ function compiler(options) {
setData('referenceType');
}
+ /** @type {Handle} */
function onexitimage() {
- var context = this.stack[this.stack.length - 1];
+ const context = this.stack[this.stack.length - 1]; // To do: clean.
- // To do: clean.
if (getData('inReference')) {
context.type += 'Reference';
context.referenceType = getData('referenceType') || 'shortcut';
@@ -43278,20 +43123,20 @@ function compiler(options) {
setData('referenceType');
}
+ /** @type {Handle} */
function onexitlabeltext(token) {
- this.stack[this.stack.length - 2].identifier = normalizeIdentifier$1(
+ this.stack[this.stack.length - 2].identifier = normalizeIdentifier(
this.sliceSerialize(token)
).toLowerCase();
}
+ /** @type {Handle} */
function onexitlabel() {
- var fragment = this.stack[this.stack.length - 1];
- var value = this.resume();
-
- this.stack[this.stack.length - 1].label = value;
+ const fragment = this.stack[this.stack.length - 1];
+ const value = this.resume();
+ this.stack[this.stack.length - 1].label = value; // Assume a reference.
- // Assume a reference.
setData('inReference', true);
if (this.stack[this.stack.length - 1].type === 'link') {
@@ -43300,225 +43145,374 @@ function compiler(options) {
this.stack[this.stack.length - 1].alt = value;
}
}
+ /** @type {Handle} */
function onexitresourcedestinationstring() {
- var data = this.resume();
+ const data = this.resume();
this.stack[this.stack.length - 1].url = data;
}
+ /** @type {Handle} */
function onexitresourcetitlestring() {
- var data = this.resume();
+ const data = this.resume();
this.stack[this.stack.length - 1].title = data;
}
+ /** @type {Handle} */
function onexitresource() {
setData('inReference');
}
+ /** @type {Handle} */
function onenterreference() {
setData('referenceType', 'collapsed');
}
+ /** @type {Handle} */
function onexitreferencestring(token) {
- var label = this.resume();
+ const 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(
this.sliceSerialize(token)
).toLowerCase();
setData('referenceType', 'full');
}
+ /** @type {Handle} */
function onexitcharacterreferencemarker(token) {
setData('characterReferenceType', token.type);
}
+ /** @type {Handle} */
function onexitcharacterreferencevalue(token) {
- var data = this.sliceSerialize(token);
- var type = getData('characterReferenceType');
- var value;
- var tail;
+ const data = this.sliceSerialize(token);
+ const type = getData('characterReferenceType');
+ /** @type {string} */
+
+ let value;
if (type) {
- value = safeFromInt(
+ value = decodeNumericCharacterReference(
data,
type === 'characterReferenceMarkerNumeric' ? 10 : 16
);
-
setData('characterReferenceType');
} else {
- value = decode$1(data);
+ // @ts-expect-error `decodeEntity` can return false for invalid named
+ // character references, but everything we’ve tokenized is valid.
+ value = decodeEntity(data);
}
- tail = this.stack.pop();
+ const tail = this.stack.pop();
tail.value += value;
tail.position.end = point(token.end);
}
+ /** @type {Handle} */
function onexitautolinkprotocol(token) {
onexitdata.call(this, token);
this.stack[this.stack.length - 1].url = this.sliceSerialize(token);
}
+ /** @type {Handle} */
function onexitautolinkemail(token) {
onexitdata.call(this, token);
this.stack[this.stack.length - 1].url =
'mailto:' + this.sliceSerialize(token);
- }
-
- //
+ } //
// Creaters.
//
+ /** @returns {Blockquote} */
+
function blockQuote() {
- return {type: 'blockquote', children: []}
+ return {
+ type: 'blockquote',
+ children: []
+ }
}
+ /** @returns {Code} */
function codeFlow() {
- return {type: 'code', lang: null, meta: null, value: ''}
+ // @ts-expect-error: we’ve always used `null`.
+ return {
+ type: 'code',
+ lang: null,
+ meta: null,
+ value: ''
+ }
}
+ /** @returns {InlineCode} */
function codeText() {
- return {type: 'inlineCode', value: ''}
+ return {
+ type: 'inlineCode',
+ value: ''
+ }
}
+ /** @returns {Definition} */
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} */
function emphasis() {
- return {type: 'emphasis', children: []}
+ return {
+ type: 'emphasis',
+ children: []
+ }
}
+ /** @returns {Heading} */
function heading() {
- return {type: 'heading', depth: undefined, children: []}
+ // @ts-expect-error `depth` will be set later.
+ return {
+ type: 'heading',
+ depth: undefined,
+ children: []
+ }
}
+ /** @returns {Break} */
function hardBreak() {
- return {type: 'break'}
+ return {
+ type: 'break'
+ }
}
+ /** @returns {HTML} */
function html() {
- return {type: 'html', value: ''}
+ return {
+ type: 'html',
+ value: ''
+ }
}
+ /** @returns {Image} */
function image() {
- return {type: 'image', title: null, url: '', alt: null}
+ // @ts-expect-error: we’ve always used `null`.
+ return {
+ type: 'image',
+ title: null,
+ url: '',
+ alt: null
+ }
}
+ /** @returns {Link} */
function link() {
- return {type: 'link', title: null, url: '', children: []}
+ // @ts-expect-error: we’ve always used `null`.
+ return {
+ type: 'link',
+ title: null,
+ url: '',
+ children: []
+ }
}
+ /**
+ * @param {Token} token
+ * @returns {List}
+ */
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}
+ */
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} */
function paragraph() {
- return {type: 'paragraph', children: []}
+ return {
+ type: 'paragraph',
+ children: []
+ }
}
+ /** @returns {Strong} */
function strong() {
- return {type: 'strong', children: []}
+ return {
+ type: 'strong',
+ children: []
+ }
}
+ /** @returns {Text} */
function text() {
- return {type: 'text', value: ''}
+ return {
+ type: 'text',
+ value: ''
+ }
}
+ /** @returns {ThematicBreak} */
function thematicBreak() {
- return {type: 'thematicBreak'}
+ return {
+ type: 'thematicBreak'
+ }
}
}
+/**
+ * @param {Extension} combined
+ * @param {Array.<Extension|Array.<Extension>>} extensions
+ * @returns {Extension}
+ */
-function configure$2(config, extensions) {
- var index = -1;
+function configure$1(combined, extensions) {
+ let index = -1;
while (++index < extensions.length) {
- extension(config, extensions[index]);
+ const value = extensions[index];
+
+ if (Array.isArray(value)) {
+ configure$1(combined, value);
+ } else {
+ extension(combined, value);
+ }
}
- return config
+ return combined
}
+/**
+ * @param {Extension} combined
+ * @param {Extension} extension
+ * @returns {void}
+ */
-function extension(config, extension) {
- var key;
- var left;
+function extension(combined, extension) {
+ /** @type {string} */
+ let key;
for (key in extension) {
- left = own$7.call(config, key) ? config[key] : (config[key] = {});
+ 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 */
- if (key === 'canContainEols' || key === 'transforms') {
- config[key] = [].concat(left, extension[key]);
- } else {
- Object.assign(left, extension[key]);
+ 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);
+ }
+ }
}
}
}
-var mdastUtilFromMarkdown = dist;
-
-var remarkParse = parse$2;
-
-var fromMarkdown = mdastUtilFromMarkdown;
-
-function parse$2(options) {
- var self = this;
+/**
+ * @typedef {import('mdast').Root} Root
+ * @typedef {import('mdast-util-from-markdown').Options} Options
+ */
- this.Parser = parse;
+/** @type {import('unified').Plugin<[Options?] | void[], string, Root>} */
+function remarkParse(options) {
+ /** @type {import('unified').ParserFunction<Root>} */
+ const parser = (doc) => {
+ // Assume options.
+ const settings = /** @type {Options} */ (this.data('settings'));
- function parse(doc) {
return fromMarkdown(
doc,
- Object.assign({}, self.data('settings'), options, {
+ 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: self.data('micromarkExtensions') || [],
- mdastExtensions: self.data('fromMarkdownExtensions') || []
+ extensions: this.data('micromarkExtensions') || [],
+ mdastExtensions: this.data('fromMarkdownExtensions') || []
})
)
- }
+ };
+
+ Object.assign(this, {Parser: parser});
}
-var zwitch$1 = factory$4;
+var own$3 = {}.hasOwnProperty;
-var noop$1 = Function.prototype;
-var own$6 = {}.hasOwnProperty;
+/**
+ * @callback Handler
+ * @param {...unknown} value
+ * @return {unknown}
+ *
+ * @typedef {Record<string, Handler>} Handlers
+ *
+ * @typedef {Object} Options
+ * @property {Handler} [unknown]
+ * @property {Handler} [invalid]
+ * @property {Handlers} [handlers]
+ */
-// Handle values based on a property.
-function factory$4(key, options) {
+/**
+ * Handle values based on a property.
+ *
+ * @param {string} key
+ * @param {Options} [options]
+ */
+function zwitch(key, options) {
var settings = options || {};
+ /**
+ * 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 (value && own$6.call(value, key)) {
- fn = own$6.call(handlers, value[key]) ? handlers[value[key]] : one.unknown;
+ if (value && own$3.call(value, key)) {
+ fn = own$3.call(handlers, value[key]) ? handlers[value[key]] : one.unknown;
}
- return (fn || noop$1).apply(this, arguments)
+ if (fn) {
+ return fn.apply(this, arguments)
+ }
}
one.handlers = settings.handlers || {};
@@ -43528,25 +43522,37 @@ function factory$4(key, options) {
return one
}
-var configure_1 = configure$1;
+/**
+ * @typedef {import('./types.js').Options} Options
+ * @typedef {import('./types.js').Context} Context
+ */
-function configure$1(base, extension) {
- var index = -1;
- var key;
+/**
+ * @param {Context} base
+ * @param {Options} extension
+ * @returns {Context}
+ */
+function configure(base, extension) {
+ let index = -1;
+ /** @type {string} */
+ let key;
// First do subextensions.
if (extension.extensions) {
while (++index < extension.extensions.length) {
- configure$1(base, extension.extensions[index]);
+ configure(base, extension.extensions[index]);
}
}
for (key in extension) {
if (key === 'extensions') ; else if (key === 'unsafe' || key === 'join') {
- base[key] = base[key].concat(extension[key] || []);
+ /* 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];
}
}
@@ -43554,37 +43560,49 @@ function configure$1(base, extension) {
return base
}
-var handle = {};
-
-var containerFlow$1 = flow$4;
-
-var repeat$5 = repeatString;
+/**
+ * @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 flow$4(parent, context) {
- var children = parent.children || [];
- var results = [];
- var index = -1;
- var child;
+/**
+ * @param {Parent} parent
+ * @param {Context} context
+ * @returns {string}
+ */
+function containerFlow(parent, context) {
+ const children = parent.children || [];
+ /** @type {Array.<string>} */
+ const results = [];
+ let index = -1;
while (++index < children.length) {
- child = children[index];
+ const child = children[index];
results.push(
context.handle(child, parent, context, {before: '\n', after: '\n'})
);
- if (index + 1 < children.length) {
+ 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) {
- var index = -1;
- var result;
+ let index = context.join.length;
+ /** @type {ReturnType<Join>} */
+ let result;
- while (++index < context.join.length) {
+ while (index--) {
result = context.join[index](left, right, parent, context);
if (result === true || result === 1) {
@@ -43592,7 +43610,7 @@ function flow$4(parent, context) {
}
if (typeof result === 'number') {
- return repeat$5('\n', 1 + Number(result))
+ return '\n'.repeat(1 + result)
}
if (result === false) {
@@ -43604,17 +43622,30 @@ function flow$4(parent, context) {
}
}
-var indentLines_1 = indentLines$4;
+/**
+ * @callback Map
+ * @param {string} value
+ * @param {number} line
+ * @param {boolean} blank
+ * @returns {string}
+ */
-var eol$1 = /\r?\n|\r/g;
+const eol = /\r?\n|\r/g;
-function indentLines$4(value, map) {
- var result = [];
- var start = 0;
- var line = 0;
- var match;
+/**
+ * @param {string} value
+ * @param {Map} map
+ * @returns {string}
+ */
+function indentLines(value, map) {
+ /** @type {Array.<string>} */
+ const result = [];
+ let start = 0;
+ let line = 0;
+ /** @type {RegExpExecArray|null} */
+ let match;
- while ((match = eol$1.exec(value))) {
+ while ((match = eol.exec(value))) {
one(value.slice(start, match.index));
result.push(match[0]);
start = match.index + match[0].length;
@@ -43625,39 +43656,59 @@ function indentLines$4(value, map) {
return result.join('')
+ /**
+ * @param {string} value
+ */
function one(value) {
result.push(map(value, line, !value));
}
}
-var blockquote_1 = blockquote;
-
-var flow$3 = containerFlow$1;
-var indentLines$3 = indentLines_1;
+/**
+ * @typedef {import('mdast').Blockquote} Blockquote
+ * @typedef {import('../types.js').Handle} Handle
+ * @typedef {import('../util/indent-lines.js').Map} Map
+ */
+/**
+ * @type {Handle}
+ * @param {Blockquote} node
+ */
function blockquote(node, _, context) {
- var exit = context.enter('blockquote');
- var value = indentLines$3(flow$3(node, context), map$3);
+ const exit = context.enter('blockquote');
+ const value = indentLines(containerFlow(node, context), map$1);
exit();
return value
}
-function map$3(line, index, blank) {
+/** @type {Map} */
+function map$1(line, _, blank) {
return '>' + (blank ? '' : ' ') + line
}
-var patternInScope_1 = patternInScope$2;
+/**
+ * @typedef {import('../types.js').Unsafe} Unsafe
+ */
-function patternInScope$2(stack, pattern) {
+/**
+ * @param {Array.<string>} stack
+ * @param {Unsafe} pattern
+ * @returns {boolean}
+ */
+function patternInScope(stack, pattern) {
return (
listInScope(stack, pattern.inConstruct, true) &&
- !listInScope(stack, pattern.notInConstruct)
+ !listInScope(stack, pattern.notInConstruct, false)
)
}
+/**
+ * @param {Array.<string>} stack
+ * @param {Unsafe['inConstruct']} list
+ * @param {boolean} none
+ * @returns {boolean}
+ */
function listInScope(stack, list, none) {
- var index;
-
if (!list) {
return none
}
@@ -43666,10 +43717,10 @@ function listInScope(stack, list, none) {
list = [list];
}
- index = -1;
+ let index = -1;
while (++index < list.length) {
- if (stack.indexOf(list[index]) !== -1) {
+ if (stack.includes(list[index])) {
return true
}
}
@@ -43677,19 +43728,24 @@ function listInScope(stack, list, none) {
return false
}
-var _break = hardBreak;
-
-var patternInScope$1 = patternInScope_1;
+/**
+ * @typedef {import('../types.js').Handle} Handle
+ * @typedef {import('mdast').Break} Break
+ */
-function hardBreak(node, _, context, safe) {
- var index = -1;
+/**
+ * @type {Handle}
+ * @param {Break} _
+ */
+function hardBreak(_, _1, context, safe) {
+ let 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])
+ patternInScope(context.stack, context.unsafe[index])
) {
return /[ \t]/.test(safe.before) ? '' : ' '
}
@@ -43698,60 +43754,74 @@ function hardBreak(node, _, context, safe) {
return '\\\n'
}
-var longestStreak_1 = longestStreak;
-
-// Get the count of the longest repeating streak of `character` in `value`.
+/**
+ * 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 maximum = 0;
- var expected;
- var index;
+ var max = 0;
if (typeof character !== 'string' || character.length !== 1) {
throw new Error('Expected character')
}
- value = String(value);
- index = value.indexOf(character);
- expected = index;
-
while (index !== -1) {
- count++;
-
if (index === expected) {
- if (count > maximum) {
- maximum = count;
+ if (++count > max) {
+ max = count;
}
} else {
count = 1;
}
expected = index + 1;
- index = value.indexOf(character, expected);
+ index = source.indexOf(character, expected);
}
- return maximum
+ return max
}
-var formatCodeAsIndented_1 = formatCodeAsIndented$2;
+/**
+ * @typedef {import('mdast').Code} Code
+ * @typedef {import('../types.js').Context} Context
+ */
-function formatCodeAsIndented$2(node, context) {
- return (
+/**
+ * @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)
+ 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)
)
}
-var checkFence_1 = checkFence$1;
+/**
+ * @typedef {import('../types.js').Context} Context
+ * @typedef {import('../types.js').Options} Options
+ */
-function checkFence$1(context) {
- var marker = context.options.fence || '`';
+/**
+ * @param {Context} context
+ * @returns {Exclude<Options['fence'], undefined>}
+ */
+function checkFence(context) {
+ const marker = context.options.fence || '`';
if (marker !== '`' && marker !== '~') {
throw new Error(
@@ -43764,25 +43834,25 @@ function checkFence$1(context) {
return marker
}
-var patternCompile_1 = patternCompile$3;
-
-function patternCompile$3(pattern) {
- var before;
- var after;
+/**
+ * @typedef {import('../types.js').Unsafe} Unsafe
+ */
+/**
+ * @param {Unsafe} pattern
+ * @returns {RegExp}
+ */
+function patternCompile(pattern) {
if (!pattern._compiled) {
- before = pattern.before ? '(?:' + pattern.before + ')' : '';
- after = pattern.after ? '(?:' + pattern.after + ')' : '';
-
- if (pattern.atBreak) {
- before = '[\\r\\n][\\t ]*' + before;
- }
+ const before =
+ (pattern.atBreak ? '[\\r\\n][\\t ]*' : '') +
+ (pattern.before ? '(?:' + pattern.before + ')' : '');
pattern._compiled = new RegExp(
(before ? '(' + before + ')' : '') +
(/[|\\{}()[\]^$+*?.-]/.test(pattern.character) ? '\\' : '') +
pattern.character +
- (after || ''),
+ (pattern.after ? '(?:' + pattern.after + ')' : ''),
'g'
);
}
@@ -43790,45 +43860,44 @@ function patternCompile$3(pattern) {
return pattern._compiled
}
-var safe_1 = safe$7;
-
-var patternCompile$2 = patternCompile_1;
-var patternInScope = patternInScope_1;
+/**
+ * @typedef {import('../types.js').Context} Context
+ * @typedef {import('../types.js').SafeOptions} SafeOptions
+ */
-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;
+/**
+ * @param {Context} context
+ * @param {string|null|undefined} input
+ * @param {SafeOptions & {encode?: Array.<string>}} config
+ * @returns {string}
+ */
+function safe(context, input, config) {
+ const value = (config.before || '') + (input || '') + (config.after || '');
+ /** @type {Array.<number>} */
+ const positions = [];
+ /** @type {Array.<string>} */
+ const result = [];
+ /** @type {Record<number, {before: boolean, after: boolean}>} */
+ const infos = {};
+ let index = -1;
while (++index < context.unsafe.length) {
- pattern = context.unsafe[index];
+ const pattern = context.unsafe[index];
if (!patternInScope(context.stack, pattern)) {
continue
}
- expression = patternCompile$2(pattern);
+ const expression = patternCompile(pattern);
+ /** @type {RegExpExecArray|null} */
+ let match;
while ((match = expression.exec(value))) {
- before = 'before' in pattern || pattern.atBreak;
- after = 'after' in pattern;
-
- position = match.index + (before ? match[1].length : 0);
+ const before = 'before' in pattern || Boolean(pattern.atBreak);
+ const after = 'after' in pattern;
+ const position = match.index + (before ? match[1].length : 0);
- if (positions.indexOf(position) === -1) {
- positions.push(position);
- infos[position] = {before: before, after: after};
- } else {
+ if (positions.includes(position)) {
if (infos[position].before && !before) {
infos[position].before = false;
}
@@ -43836,24 +43905,24 @@ function safe$7(context, input, config) {
if (infos[position].after && !after) {
infos[position].after = false;
}
+ } else {
+ positions.push(position);
+ infos[position] = {before, after};
}
}
}
positions.sort(numerical);
- start = config.before ? config.before.length : 0;
- end = value.length - (config.after ? config.after.length : 0);
+ let start = config.before ? config.before.length : 0;
+ const end = value.length - (config.after ? config.after.length : 0);
index = -1;
while (++index < positions.length) {
- position = positions[index];
+ const position = positions[index];
- if (
- // Character before or after matched:
- position < start ||
- position >= end
- ) {
+ // Character before or after matched:
+ if (position < start || position >= end) {
continue
}
@@ -43881,7 +43950,7 @@ function safe$7(context, input, config) {
if (
/[!-/:-@[-`{-~]/.test(value.charAt(position)) &&
- (!config.encode || config.encode.indexOf(value.charAt(position)) === -1)
+ (!config.encode || !config.encode.includes(value.charAt(position)))
) {
// Character escape.
result.push('\\');
@@ -43899,18 +43968,31 @@ function safe$7(context, input, config) {
return result.join('')
}
+/**
+ * @param {number} a
+ * @param {number} b
+ * @returns {number}
+ */
function numerical(a, b) {
return a - b
}
+/**
+ * @param {string} value
+ * @param {string} after
+ * @returns {string}
+ */
function escapeBackslashes(value, after) {
- var expression = /\\(?=[!-/:-@[-`{-~])/g;
- var positions = [];
- var results = [];
- var index = -1;
- var start = 0;
- var whole = value + after;
- var match;
+ const expression = /\\(?=[!-/:-@[-`{-~])/g;
+ /** @type {Array.<number>} */
+ const positions = [];
+ /** @type {Array.<string>} */
+ const results = [];
+ const whole = value + after;
+ let index = -1;
+ let start = 0;
+ /** @type {RegExpExecArray|null} */
+ let match;
while ((match = expression.exec(whole))) {
positions.push(match.index);
@@ -43930,35 +44012,39 @@ function escapeBackslashes(value, after) {
return results.join('')
}
-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;
+/**
+ * @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
+ */
+/**
+ * @type {Handle}
+ * @param {Code} node
+ */
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)) {
+ 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$2(raw, map$2);
+ value = indentLines(raw, map);
} else {
- sequence = repeat$4(marker, Math.max(streak(raw, marker) + 1, 3));
+ 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$6(context, node.lang, {
+ value += safe(context, node.lang, {
before: '`',
after: ' ',
encode: ['`']
@@ -43970,7 +44056,7 @@ function code$1(node, _, context) {
subexit = context.enter('codeFencedMeta' + suffix);
value +=
' ' +
- safe$6(context, node.meta, {
+ safe(context, node.meta, {
before: ' ',
after: '\n',
encode: ['`']
@@ -43991,4485 +44077,34 @@ function code$1(node, _, context) {
return value
}
-function map$2(line, _, blank) {
+/** @type {Map} */
+function map(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;
-
-var decodeEntity_1 = decodeEntity;
-
-var own$5 = {}.hasOwnProperty;
-
-function decodeEntity(characters) {
- return own$5.call(characterEntities, characters)
- ? characterEntities[characters]
- : false
-}
-
-var association_1 = association$3;
-
-var decode = decodeEntity_1;
+/**
+ * @typedef {import('mdast').Association} Association
+ */
-var characterEscape = /\\([!-/:-@[-`{-~])/g;
-var characterReference = /&(#(\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;
+const characterEscape = /\\([!-/:-@[-`{-~])/g;
+const 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.
-// The `identifier` is used to match one association to another: controversially,
-// character escapes and references don’t work in this matching: `&copy;` 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) {
+/**
+ * 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: `&copy;` 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.
+ *
+ * @param {Association} node
+ * @returns {string}
+ */
+function association(node) {
if (node.label || !node.identifier) {
return node.label || ''
}
@@ -48479,14 +44114,26 @@ function association$3(node) {
.replace(characterReference, decodeIfPossible)
}
+/**
+ * @param {string} $0
+ * @param {string} $1
+ * @returns {string}
+ */
function decodeIfPossible($0, $1) {
- return decode($1) || $0
+ return decodeEntity($1) || $0
}
-var checkQuote_1 = checkQuote$3;
+/**
+ * @typedef {import('../types.js').Context} Context
+ * @typedef {import('../types.js').Options} Options
+ */
-function checkQuote$3(context) {
- var marker = context.options.quote || '"';
+/**
+ * @param {Context} context
+ * @returns {Exclude<Options['quote'], undefined>}
+ */
+function checkQuote(context) {
+ const marker = context.options.quote || '"';
if (marker !== '"' && marker !== "'") {
throw new Error(
@@ -48499,19 +44146,22 @@ function checkQuote$3(context) {
return marker
}
-var definition_1 = definition;
-
-var association$2 = association_1;
-var checkQuote$2 = checkQuote_1;
-var safe$5 = safe_1;
+/**
+ * @typedef {import('mdast').Definition} Definition
+ * @typedef {import('../types.js').Handle} Handle
+ */
+/**
+ * @type {Handle}
+ * @param {Definition} node
+ */
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: ']'}) + ']: ';
+ 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();
@@ -48522,11 +44172,11 @@ function definition(node, _, context) {
/[ \t\r\n]/.test(node.url)
) {
subexit = context.enter('destinationLiteral');
- value += '<' + safe$5(context, node.url, {before: '<', after: '>'}) + '>';
+ value += '<' + safe(context, node.url, {before: '<', after: '>'}) + '>';
} else {
// No whitespace, raw is prettier.
subexit = context.enter('destinationRaw');
- value += safe$5(context, node.url, {before: ' ', after: ' '});
+ value += safe(context, node.url, {before: ' ', after: ' '});
}
subexit();
@@ -48536,7 +44186,7 @@ function definition(node, _, context) {
value +=
' ' +
marker +
- safe$5(context, node.title, {before: marker, after: marker}) +
+ safe(context, node.title, {before: marker, after: marker}) +
marker;
subexit();
}
@@ -48546,10 +44196,17 @@ function definition(node, _, context) {
return value
}
-var checkEmphasis_1 = checkEmphasis$1;
+/**
+ * @typedef {import('../types.js').Context} Context
+ * @typedef {import('../types.js').Options} Options
+ */
-function checkEmphasis$1(context) {
- var marker = context.options.emphasis || '*';
+/**
+ * @param {Context} context
+ * @returns {Exclude<Options['emphasis'], undefined>}
+ */
+function checkEmphasis(context) {
+ const marker = context.options.emphasis || '*';
if (marker !== '*' && marker !== '_') {
throw new Error(
@@ -48562,22 +44219,34 @@ function checkEmphasis$1(context) {
return marker
}
-var containerPhrasing$1 = phrasing$6;
+/**
+ * @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 phrasing$6(parent, context, safeOptions) {
- var children = parent.children || [];
- var results = [];
- var index = -1;
- var before = safeOptions.before;
- var after;
- var handle;
- var child;
+/**
+ * @param {Parent} parent
+ * @param {Context} context
+ * @param {SafeOptions} safeOptions
+ * @returns {string}
+ */
+function containerPhrasing(parent, context, safeOptions) {
+ const children = parent.children || [];
+ /** @type {Array.<string>} */
+ const results = [];
+ let index = -1;
+ let before = safeOptions.before;
while (++index < children.length) {
- child = children[index];
+ const child = children[index];
+ /** @type {string} */
+ let after;
if (index + 1 < children.length) {
- handle = context.handle.handlers[children[index + 1].type];
+ // @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, {
@@ -48607,12 +44276,7 @@ function phrasing$6(parent, context, safeOptions) {
before = ' ';
}
- results.push(
- context.handle(child, parent, context, {
- before: before,
- after: after
- })
- );
+ results.push(context.handle(child, parent, context, {before, after}));
before = results[results.length - 1].slice(-1);
}
@@ -48620,91 +44284,86 @@ function phrasing$6(parent, context, safeOptions) {
return results.join('')
}
-var emphasis_1 = emphasis;
-emphasis.peek = emphasisPeek;
+/**
+ * @typedef {import('mdast').Emphasis} Emphasis
+ * @typedef {import('../types.js').Handle} Handle
+ */
-var checkEmphasis = checkEmphasis_1;
-var phrasing$5 = containerPhrasing$1;
+emphasis.peek = emphasisPeek;
// 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) {
- var marker = checkEmphasis(context);
- var exit = context.enter('emphasis');
- var value = phrasing$5(node, context, {before: marker, after: marker});
+ const marker = checkEmphasis(context);
+ const exit = context.enter('emphasis');
+ const value = containerPhrasing(node, context, {
+ before: marker,
+ after: marker
+ });
exit();
return marker + value + marker
}
-function emphasisPeek(node, _, context) {
+/**
+ * @type {Handle}
+ * @param {Emphasis} _
+ */
+function emphasisPeek(_, _1, context) {
return context.options.emphasis || '*'
}
-var mdastUtilToString = toString$3;
-
-// Get the text content of a node.
-// Prefer the node’s plain-text fields, otherwise serialize its children,
-// and if the given value is an array, serialize the nodes in it.
-function toString$3(node) {
- return (
- (node &&
- (node.value ||
- node.alt ||
- node.title ||
- ('children' in node && all$1(node.children)) ||
- ('length' in node && all$1(node)))) ||
- ''
- )
-}
-
-function all$1(values) {
- var result = [];
- var index = -1;
-
- while (++index < values.length) {
- result[index] = toString$3(values[index]);
- }
-
- return result.join('')
-}
-
-var formatHeadingAsSetext_1 = formatHeadingAsSetext$2;
-
-var toString$2 = mdastUtilToString;
+/**
+ * @typedef {import('mdast').Heading} Heading
+ * @typedef {import('../types.js').Context} Context
+ */
-function formatHeadingAsSetext$2(node, context) {
- return (
- context.options.setext && (!node.depth || node.depth < 3) && toString$2(node)
+/**
+ * @param {Heading} node
+ * @param {Context} context
+ * @returns {boolean}
+ */
+function formatHeadingAsSetext(node, context) {
+ return Boolean(
+ context.options.setext && (!node.depth || node.depth < 3) && toString(node)
)
}
-var heading_1 = heading;
-
-var repeat$3 = repeatString;
-var formatHeadingAsSetext$1 = formatHeadingAsSetext_1;
-var phrasing$4 = containerPhrasing$1;
+/**
+ * @typedef {import('mdast').Heading} Heading
+ * @typedef {import('../types.js').Handle} Handle
+ * @typedef {import('../types.js').Exit} Exit
+ */
+/**
+ * @type {Handle}
+ * @param {Heading} node
+ */
function heading(node, _, context) {
- var rank = Math.max(Math.min(6, node.depth || 1), 1);
- var exit;
- var subexit;
- var value;
- var sequence;
+ const rank = Math.max(Math.min(6, node.depth || 1), 1);
+ /** @type {Exit} */
+ let exit;
+ /** @type {Exit} */
+ let subexit;
+ /** @type {string} */
+ let value;
- if (formatHeadingAsSetext$1(node, context)) {
+ if (formatHeadingAsSetext(node, context)) {
exit = context.enter('headingSetext');
subexit = context.enter('phrasing');
- value = phrasing$4(node, context, {before: '\n', after: '\n'});
+ value = containerPhrasing(node, context, {before: '\n', after: '\n'});
subexit();
exit();
return (
value +
'\n' +
- repeat$3(
- rank === 1 ? '=' : '-',
+ (rank === 1 ? '=' : '-').repeat(
// The whole size…
value.length -
// Minus the position of the character after the last EOL (or
@@ -48714,10 +44373,10 @@ function heading(node, _, context) {
)
}
- sequence = repeat$3('#', rank);
+ const sequence = '#'.repeat(rank);
exit = context.enter('headingAtx');
subexit = context.enter('phrasing');
- value = phrasing$4(node, context, {before: '# ', after: '\n'});
+ value = containerPhrasing(node, context, {before: '# ', after: '\n'});
value = value ? sequence + ' ' + value : sequence;
if (context.options.closeAtx) {
value += ' ' + sequence;
@@ -48729,29 +44388,45 @@ function heading(node, _, context) {
return value
}
-var html_1 = html;
+/**
+ * @typedef {import('mdast').HTML} HTML
+ * @typedef {import('../types.js').Handle} Handle
+ */
+
html.peek = htmlPeek;
+/**
+ * @type {Handle}
+ * @param {HTML} node
+ */
function html(node) {
return node.value || ''
}
+/**
+ * @type {Handle}
+ */
function htmlPeek() {
return '<'
}
-var image_1 = image;
-image.peek = imagePeek;
+/**
+ * @typedef {import('mdast').Image} Image
+ * @typedef {import('../types.js').Handle} Handle
+ */
-var checkQuote$1 = checkQuote_1;
-var safe$4 = safe_1;
+image.peek = imagePeek;
+/**
+ * @type {Handle}
+ * @param {Image} node
+ */
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: ']'}) + '](';
+ 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();
@@ -48762,11 +44437,11 @@ function image(node, _, context) {
/[ \t\r\n]/.test(node.url)
) {
subexit = context.enter('destinationLiteral');
- value += '<' + safe$4(context, node.url, {before: '<', after: '>'}) + '>';
+ value += '<' + safe(context, node.url, {before: '<', after: '>'}) + '>';
} else {
// No whitespace, raw is prettier.
subexit = context.enter('destinationRaw');
- value += safe$4(context, node.url, {
+ value += safe(context, node.url, {
before: '(',
after: node.title ? ' ' : ')'
});
@@ -48779,7 +44454,7 @@ function image(node, _, context) {
value +=
' ' +
quote +
- safe$4(context, node.title, {before: quote, after: quote}) +
+ safe(context, node.title, {before: quote, after: quote}) +
quote;
subexit();
}
@@ -48790,31 +44465,37 @@ function image(node, _, context) {
return value
}
+/**
+ * @type {Handle}
+ */
function imagePeek() {
return '!'
}
-var imageReference_1 = imageReference;
-imageReference.peek = imageReferencePeek;
+/**
+ * @typedef {import('mdast').ImageReference} ImageReference
+ * @typedef {import('../types.js').Handle} Handle
+ */
-var association$1 = association_1;
-var safe$3 = safe_1;
+imageReference.peek = imageReferencePeek;
+/**
+ * @type {Handle}
+ * @param {ImageReference} node
+ */
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;
+ 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.
- stack = context.stack;
+ const stack = context.stack;
context.stack = [];
subexit = context.enter('reference');
- reference = safe$3(context, association$1(node), {before: '[', after: ']'});
+ const reference = safe(context, association(node), {before: '[', after: ']'});
subexit();
context.stack = stack;
exit();
@@ -48828,23 +44509,28 @@ function imageReference(node, _, context) {
return value
}
+/**
+ * @type {Handle}
+ */
function imageReferencePeek() {
return '!'
}
-var inlineCode_1 = inlineCode$1;
-inlineCode$1.peek = inlineCodePeek$1;
+/**
+ * @typedef {import('mdast').InlineCode} InlineCode
+ * @typedef {import('../types.js').Handle} Handle
+ */
-var patternCompile$1 = patternCompile_1;
+inlineCode.peek = inlineCodePeek;
-function inlineCode$1(node, parent, context) {
- var value = node.value || '';
- var sequence = '`';
- var index = -1;
- var pattern;
- var expression;
- var match;
- var position;
+/**
+ * @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.
@@ -48857,8 +44543,7 @@ function inlineCode$1(node, parent, context) {
// 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)))
+ ((/^[ \r\n]/.test(value) && /[ \r\n]$/.test(value)) || /^`|`$/.test(value))
) {
value = ' ' + value + ' ';
}
@@ -48871,17 +44556,18 @@ function inlineCode$1(node, parent, context) {
// transformed to spaces when going from markdown to HTML anyway, we can swap
// them out.
while (++index < context.unsafe.length) {
- pattern = context.unsafe[index];
+ 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
- expression = patternCompile$1(pattern);
-
while ((match = expression.exec(value))) {
- position = match.index;
+ let position = match.index;
// Support CRLF (patterns only look for one of the characters).
if (
@@ -48898,59 +44584,75 @@ function inlineCode$1(node, parent, context) {
return sequence + value + sequence
}
-function inlineCodePeek$1() {
+/**
+ * @type {Handle}
+ */
+function inlineCodePeek() {
return '`'
}
-var formatLinkAsAutolink_1 = formatLinkAsAutolink$1;
-
-var toString$1 = mdastUtilToString;
+/**
+ * @typedef {import('mdast').Link} Link
+ * @typedef {import('../types.js').Context} Context
+ */
-function formatLinkAsAutolink$1(node, context) {
- var raw = toString$1(node);
+/**
+ * @param {Link} node
+ * @param {Context} context
+ * @returns {boolean}
+ */
+function formatLinkAsAutolink(node, context) {
+ const raw = toString(node);
- return (
+ 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)
+ // 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)
)
}
-var link_1 = link;
-link.peek = linkPeek;
+/**
+ * @typedef {import('mdast').Link} Link
+ * @typedef {import('../types.js').Handle} Handle
+ * @typedef {import('../types.js').Exit} Exit
+ */
-var checkQuote = checkQuote_1;
-var formatLinkAsAutolink = formatLinkAsAutolink_1;
-var phrasing$3 = containerPhrasing$1;
-var safe$2 = safe_1;
+link.peek = linkPeek;
+/**
+ * @type {Handle}
+ * @param {Link} node
+ */
function link(node, _, context) {
- var quote = checkQuote(context);
- var suffix = quote === '"' ? 'Quote' : 'Apostrophe';
- var exit;
- var subexit;
- var value;
- var stack;
+ 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.
- stack = context.stack;
+ const stack = context.stack;
context.stack = [];
exit = context.enter('autolink');
- value = '<' + phrasing$3(node, context, {before: '<', after: '>'}) + '>';
+ value =
+ '<' + containerPhrasing(node, context, {before: '<', after: '>'}) + '>';
exit();
context.stack = stack;
return value
@@ -48958,7 +44660,8 @@ function link(node, _, context) {
exit = context.enter('link');
subexit = context.enter('label');
- value = '[' + phrasing$3(node, context, {before: '[', after: ']'}) + '](';
+ value =
+ '[' + containerPhrasing(node, context, {before: '[', after: ']'}) + '](';
subexit();
if (
@@ -48968,11 +44671,11 @@ function link(node, _, context) {
/[ \t\r\n]/.test(node.url)
) {
subexit = context.enter('destinationLiteral');
- value += '<' + safe$2(context, node.url, {before: '<', after: '>'}) + '>';
+ value += '<' + safe(context, node.url, {before: '<', after: '>'}) + '>';
} else {
// No whitespace, raw is prettier.
subexit = context.enter('destinationRaw');
- value += safe$2(context, node.url, {
+ value += safe(context, node.url, {
before: '(',
after: node.title ? ' ' : ')'
});
@@ -48985,7 +44688,7 @@ function link(node, _, context) {
value +=
' ' +
quote +
- safe$2(context, node.title, {before: quote, after: quote}) +
+ safe(context, node.title, {before: quote, after: quote}) +
quote;
subexit();
}
@@ -48996,32 +44699,38 @@ function link(node, _, context) {
return value
}
+/**
+ * @type {Handle}
+ * @param {Link} node
+ */
function linkPeek(node, _, context) {
return formatLinkAsAutolink(node, context) ? '<' : '['
}
-var linkReference_1 = linkReference;
-linkReference.peek = linkReferencePeek;
+/**
+ * @typedef {import('mdast').LinkReference} LinkReference
+ * @typedef {import('../types.js').Handle} Handle
+ */
-var association = association_1;
-var phrasing$2 = containerPhrasing$1;
-var safe$1 = safe_1;
+linkReference.peek = linkReferencePeek;
+/**
+ * @type {Handle}
+ * @param {LinkReference} node
+ */
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;
+ 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.
- stack = context.stack;
+ const stack = context.stack;
context.stack = [];
subexit = context.enter('reference');
- reference = safe$1(context, association(node), {before: '[', after: ']'});
+ const reference = safe(context, association(node), {before: '[', after: ']'});
subexit();
context.stack = stack;
exit();
@@ -49035,25 +44744,40 @@ function linkReference(node, _, context) {
return value
}
+/**
+ * @type {Handle}
+ */
function linkReferencePeek() {
return '['
}
-var list_1 = list;
-
-var flow$2 = containerFlow$1;
+/**
+ * @typedef {import('mdast').List} List
+ * @typedef {import('../types.js').Handle} Handle
+ */
+/**
+ * @type {Handle}
+ * @param {List} node
+ */
function list(node, _, context) {
- var exit = context.enter('list');
- var value = flow$2(node, context);
+ const exit = context.enter('list');
+ const value = containerFlow(node, context);
exit();
return value
}
-var checkBullet_1 = checkBullet$2;
+/**
+ * @typedef {import('../types.js').Context} Context
+ * @typedef {import('../types.js').Options} Options
+ */
-function checkBullet$2(context) {
- var marker = context.options.bullet || '*';
+/**
+ * @param {Context} context
+ * @returns {Exclude<Options['bullet'], undefined>}
+ */
+function checkBullet(context) {
+ const marker = context.options.bullet || '*';
if (marker !== '*' && marker !== '+' && marker !== '-') {
throw new Error(
@@ -49066,11 +44790,20 @@ function checkBullet$2(context) {
return marker
}
-var checkListItemIndent_1 = checkListItemIndent$2;
+/**
+ * @typedef {import('../types.js').Context} Context
+ * @typedef {import('../types.js').Options} Options
+ */
-function checkListItemIndent$2(context) {
- var style = context.options.listItemIndent || 'tab';
+/**
+ * @param {Context} context
+ * @returns {Exclude<Options['listItemIndent'], undefined>}
+ */
+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'
}
@@ -49086,79 +44819,102 @@ function checkListItemIndent$2(context) {
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;
+/**
+ * @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
+ */
-function listItem$1(node, parent, context) {
- var bullet = checkBullet$1(context);
- var listItemIndent = checkListItemIndent$1(context);
- var size;
- var value;
- var exit;
+/**
+ * @type {Handle}
+ * @param {ListItem} node
+ */
+function listItem(node, parent, context) {
+ const listItemIndent = checkListItemIndent(context);
+ /** @type {string} */
+ let bullet = checkBullet(context);
- if (parent && parent.ordered) {
+ if (parent && parent.type === 'list' && parent.ordered) {
bullet =
- (parent.start > -1 ? parent.start : 1) +
+ (typeof parent.start === 'number' && parent.start > -1
+ ? parent.start
+ : 1) +
(context.options.incrementListMarker === false
? 0
: parent.children.indexOf(node)) +
'.';
}
- size = bullet.length + 1;
+ let size = bullet.length + 1;
if (
listItemIndent === 'tab' ||
- (listItemIndent === 'mixed' && ((parent && parent.spread) || node.spread))
+ (listItemIndent === 'mixed' &&
+ ((parent && 'spread' in parent && parent.spread) || node.spread))
) {
size = Math.ceil(size / 4) * 4;
}
- exit = context.enter('listItem');
- value = indentLines$1(flow$1(node, context), map);
+ 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$2(' ', size)) + line
+ return (blank ? '' : ' '.repeat(size)) + line
}
- return (blank ? bullet : bullet + repeat$2(' ', size - bullet.length)) + line
+ return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line
}
}
-var paragraph_1 = paragraph;
-
-var phrasing$1 = containerPhrasing$1;
+/**
+ * @typedef {import('mdast').Paragraph} Paragraph
+ * @typedef {import('../types.js').Handle} Handle
+ */
+/**
+ * @type {Handle}
+ * @param {Paragraph} node
+ */
function paragraph(node, _, context) {
- var exit = context.enter('paragraph');
- var subexit = context.enter('phrasing');
- var value = phrasing$1(node, context, {before: '\n', after: '\n'});
+ const exit = context.enter('paragraph');
+ const subexit = context.enter('phrasing');
+ const value = containerPhrasing(node, context, {before: '\n', after: '\n'});
subexit();
exit();
return value
}
-var root_1 = root;
-
-var flow = containerFlow$1;
+/**
+ * @typedef {import('mdast').Root} Root
+ * @typedef {import('../types.js').Handle} Handle
+ */
+/**
+ * @type {Handle}
+ * @param {Root} node
+ */
function root(node, _, context) {
- return flow(node, context)
+ return containerFlow(node, context)
}
-var checkStrong_1 = checkStrong$1;
+/**
+ * @typedef {import('../types.js').Context} Context
+ * @typedef {import('../types.js').Options} Options
+ */
-function checkStrong$1(context) {
- var marker = context.options.strong || '*';
+/**
+ * @param {Context} context
+ * @returns {Exclude<Options['strong'], undefined>}
+ */
+function checkStrong(context) {
+ const marker = context.options.strong || '*';
if (marker !== '*' && marker !== '_') {
throw new Error(
@@ -49171,40 +44927,64 @@ function checkStrong$1(context) {
return marker
}
-var strong_1 = strong;
-strong.peek = strongPeek;
+/**
+ * @typedef {import('mdast').Strong} Strong
+ * @typedef {import('../types.js').Handle} Handle
+ */
-var checkStrong = checkStrong_1;
-var phrasing = containerPhrasing$1;
+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) {
- var marker = checkStrong(context);
- var exit = context.enter('strong');
- var value = phrasing(node, context, {before: marker, after: marker});
+ 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
}
-function strongPeek(node, _, context) {
+/**
+ * @type {Handle}
+ * @param {Strong} _
+ */
+function strongPeek(_, _1, context) {
return context.options.strong || '*'
}
-var text_1 = text$1;
-
-var safe = safe_1;
+/**
+ * @typedef {import('mdast').Text} Text
+ * @typedef {import('../types.js').Handle} Handle
+ */
-function text$1(node, parent, context, safeOptions) {
+/**
+ * @type {Handle}
+ * @param {Text} node
+ */
+function text$1(node, _, context, safeOptions) {
return safe(context, node.value, safeOptions)
}
-var checkRuleRepeat = checkRule$2;
+/**
+ * @typedef {import('../types.js').Context} Context
+ * @typedef {import('../types.js').Options} Options
+ */
-function checkRule$2(context) {
- var repetition = context.options.ruleRepetition || 3;
+/**
+ * @param {Context} context
+ * @returns {Exclude<Options['ruleRepetition'], undefined>}
+ */
+function checkRuleRepetition(context) {
+ const repetition = context.options.ruleRepetition || 3;
if (repetition < 3) {
throw new Error(
@@ -49217,10 +44997,17 @@ function checkRule$2(context) {
return repetition
}
-var checkRule_1 = checkRule$1;
+/**
+ * @typedef {import('../types.js').Context} Context
+ * @typedef {import('../types.js').Options} Options
+ */
-function checkRule$1(context) {
- var marker = context.options.rule || '*';
+/**
+ * @param {Context} context
+ * @returns {Exclude<Options['rule'], undefined>}
+ */
+function checkRule(context) {
+ const marker = context.options.rule || '*';
if (marker !== '*' && marker !== '-' && marker !== '_') {
throw new Error(
@@ -49233,47 +45020,54 @@ function checkRule$1(context) {
return marker
}
-var thematicBreak_1 = thematicBreak;
-
-var repeat$1 = repeatString;
-var checkRepeat = checkRuleRepeat;
-var checkRule = checkRule_1;
+/**
+ * @typedef {import('../types.js').Handle} Handle
+ * @typedef {import('mdast').ThematicBreak} ThematicBreak
+ */
-function thematicBreak(node, parent, context) {
- var value = repeat$1(
- checkRule(context) + (context.options.ruleSpaces ? ' ' : ''),
- checkRepeat(context)
- );
+/**
+ * @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
}
-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;
+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.<Join>} */
+const join = [joinDefaults];
+
+/** @type {Join} */
function joinDefaults(left, right, parent, context) {
if (
// Two lists with the same marker.
@@ -49291,7 +45085,7 @@ function joinDefaults(left, right, parent, context) {
// Join children of a list or an item.
// In which case, `parent` has a `spread` field.
- if (typeof parent.spread === 'boolean') {
+ if ('spread' in parent && typeof parent.spread === 'boolean') {
if (
left.type === 'paragraph' &&
// Two paragraphs.
@@ -49307,7 +45101,12 @@ function joinDefaults(left, right, parent, context) {
}
}
-var unsafe = [
+/**
+ * @typedef {import('./types.js').Unsafe} Unsafe
+ */
+
+/** @type {Array.<Unsafe>} */
+const unsafe = [
{
character: '\t',
inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde']
@@ -49418,44 +45217,49 @@ var unsafe = [
{atBreak: true, character: '~'}
];
-var lib = toMarkdown$1;
-
-var zwitch = zwitch$1;
-var configure = configure_1;
-var defaultHandlers = handle;
-var defaultJoin = join;
-var defaultUnsafe = unsafe;
+/**
+ * @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
+ */
-function toMarkdown$1(tree, options) {
- var settings = options || {};
- var context = {
- enter: enter,
+/**
+ * @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: {}
};
- var result;
- configure(context, {
- unsafe: defaultUnsafe,
- join: defaultJoin,
- handlers: defaultHandlers
- });
- configure(context, settings);
+ configure(context, {unsafe, join, handlers: handle});
+ configure(context, options);
if (context.options.tightDefinitions) {
- context.join = [joinDefinition].concat(context.join);
+ configure(context, {join: [joinDefinition]});
}
+ /** @type {Handle} */
context.handle = zwitch('type', {
- invalid: invalid,
- unknown: unknown,
+ invalid,
+ // @ts-expect-error: hush.
+ unknown,
+ // @ts-expect-error: hush.
handlers: context.handlers
});
- result = context.handle(tree, null, context, {before: '\n', after: '\n'});
+ let result = context.handle(tree, null, context, {before: '\n', after: '\n'});
if (
result &&
@@ -49467,6 +45271,7 @@ function toMarkdown$1(tree, options) {
return result
+ /** @type {Context['enter']} */
function enter(name) {
context.stack.push(name);
return exit
@@ -49477,14 +45282,23 @@ function toMarkdown$1(tree, options) {
}
}
+/**
+ * @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) {
@@ -49492,38 +45306,36 @@ function joinDefinition(left, right) {
}
}
-var mdastUtilToMarkdown = lib;
-
-var remarkStringify = stringify$1;
-
-var toMarkdown = mdastUtilToMarkdown;
-
-function stringify$1(options) {
- var self = this;
+/**
+ * @typedef {import('mdast').Root|import('mdast').Content} Node
+ * @typedef {import('mdast-util-to-markdown').Options} Options
+ */
- this.Compiler = compile;
+/** @type {import('unified').Plugin<[Options]|void[], Node, string>} */
+function remarkStringify(options) {
+ /** @type {import('unified').CompilerFunction<Node, string>} */
+ const compiler = (tree) => {
+ // Assume options.
+ const settings = /** @type {Options} */ (this.data('settings'));
- function compile(tree) {
return toMarkdown(
tree,
- Object.assign({}, self.data('settings'), options, {
+ 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: self.data('toMarkdownExtensions') || []
+ extensions: this.data('toMarkdownExtensions') || []
})
)
- }
-}
+ };
-var unified = unified_1;
-var parse$1 = remarkParse;
-var stringify = remarkStringify;
+ Object.assign(this, {Compiler: compiler});
+}
-var remark = unified().use(parse$1).use(stringify).freeze();
+const remark = unified().use(remarkParse).use(remarkStringify).freeze();
const name$1 = "remark";
-const version$1 = "13.0.0";
+const version$1 = "14.0.1";
const description$1 = "Markdown processor powered by plugins part of the unified collective";
const license = "MIT";
const keywords = [
@@ -49552,21 +45364,32 @@ const author = "Titus Wormer <tituswormer@gmail.com> (https://wooorm.com)";
const contributors = [
"Titus Wormer <tituswormer@gmail.com> (https://wooorm.com)"
];
+const sideEffects = false;
+const type = "module";
+const main$1 = "index.js";
+const types = "index.d.ts";
const files = [
- "index.js",
- "types/index.d.ts"
+ "index.d.ts",
+ "index.js"
];
-const types$1 = "types/index.d.ts";
const dependencies$1 = {
- "remark-parse": "^9.0.0",
- "remark-stringify": "^9.0.0",
- unified: "^9.1.0"
+ "@types/mdast": "^3.0.0",
+ "remark-parse": "^10.0.0",
+ "remark-stringify": "^10.0.0",
+ unified: "^10.0.0"
};
const scripts$1 = {
- test: "tape test.js"
+ test: "node --conditions development test.js",
+ build: "rimraf \"*.d.ts\" && tsc && type-coverage"
};
const xo = false;
-var require$$3 = {
+const typeCoverage = {
+ atLeast: 100,
+ detail: true,
+ strict: true,
+ ignoreCatch: true
+};
+var proc = {
name: name$1,
version: version$1,
description: description$1,
@@ -49578,11 +45401,15 @@ var require$$3 = {
funding: funding,
author: author,
contributors: contributors,
+ sideEffects: sideEffects,
+ type: type,
+ main: main$1,
+ types: types,
files: files,
- types: types$1,
dependencies: dependencies$1,
scripts: scripts$1,
- xo: xo
+ xo: xo,
+ typeCoverage: typeCoverage
};
const name = "node-lint-md-cli-rollup";
@@ -49597,17 +45424,17 @@ const devDependencies = {
};
const 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"
};
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"
+ "build-node": "npm run build && npx shx cp dist/index.mjs ../lint-md.mjs"
};
-var require$$4 = {
+var cli = {
name: name,
description: description,
version: version,
@@ -49708,7 +45535,7 @@ function location(file) {
* @typedef {null|undefined|Type|Props|TestFunctionAnything|Array.<Type|Props|TestFunctionAnything>} Test
*/
-const convert$2 =
+const convert =
/**
* @type {(
* (<T extends Node>(test: T['type']|Partial<T>|TestFunctionPredicate<T>) => AssertPredicate<T>) &
@@ -49728,15 +45555,15 @@ const convert$2 =
*/
function (test) {
if (test === undefined || test === null) {
- return ok$1
+ return ok
}
if (typeof test === 'string') {
- return typeFactory$1(test)
+ return typeFactory(test)
}
if (typeof test === 'object') {
- return Array.isArray(test) ? anyFactory$1(test) : propsFactory(test)
+ return Array.isArray(test) ? anyFactory(test) : propsFactory(test)
}
if (typeof test === 'function') {
@@ -49750,13 +45577,13 @@ const convert$2 =
* @param {Array.<Type|Props|TestFunctionAnything>} tests
* @returns {AssertAnything}
*/
-function anyFactory$1(tests) {
+function anyFactory(tests) {
/** @type {Array.<AssertAnything>} */
const checks = [];
let index = -1;
while (++index < tests.length) {
- checks[index] = convert$2(tests[index]);
+ checks[index] = convert(tests[index]);
}
return castFactory(any)
@@ -49811,7 +45638,7 @@ function propsFactory(check) {
* @param {Type} check
* @returns {AssertAnything}
*/
-function typeFactory$1(check) {
+function typeFactory(check) {
return castFactory(type)
/**
@@ -49843,7 +45670,7 @@ function castFactory(check) {
}
// Utility to return true.
-function ok$1() {
+function ok() {
return true
}
@@ -49851,7 +45678,7 @@ function ok$1() {
* @param {string} d
* @returns {string}
*/
-function color$3(d) {
+function color$2(d) {
return '\u001B[33m' + d + '\u001B[39m'
}
@@ -49864,17 +45691,17 @@ function color$3(d) {
/**
* Continue traversing as normal
*/
-const CONTINUE$3 = true;
+const CONTINUE$2 = true;
/**
* Do not traverse this node’s children
*/
-const SKIP$3 = 'skip';
+const SKIP$2 = 'skip';
/**
* Stop traversing immediately
*/
-const EXIT$3 = false;
+const EXIT$2 = false;
-const visitParents$3 =
+const visitParents$2 =
/**
* @type {(
* (<T extends Node>(tree: Node, test: T['type']|Partial<T>|import('unist-util-is').TestFunctionPredicate<T>|Array.<T['type']|Partial<T>|import('unist-util-is').TestFunctionPredicate<T>>, visitor: Visitor<T>, reverse?: boolean) => void) &
@@ -49899,7 +45726,7 @@ const visitParents$3 =
test = null;
}
- var is = convert$2(test);
+ var is = convert(test);
var step = reverse ? -1 : 1;
factory(tree, null, [])();
@@ -49926,7 +45753,7 @@ const visitParents$3 =
Object.defineProperty(visit, 'name', {
value:
'node (' +
- color$3(value.type + (name ? '<' + name + '>' : '')) +
+ color$2(value.type + (name ? '<' + name + '>' : '')) +
')'
});
}
@@ -49946,12 +45773,12 @@ const visitParents$3 =
if (!test || is(node, index, parents[parents.length - 1] || null)) {
result = toResult$2(visitor(node, parents));
- if (result[0] === EXIT$3) {
+ if (result[0] === EXIT$2) {
return result
}
}
- if (node.children && result[0] !== SKIP$3) {
+ 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.
@@ -49961,7 +45788,7 @@ const visitParents$3 =
while (offset > -1 && offset < node.children.length) {
subresult = factory(node.children[offset], offset, grandparents)();
- if (subresult[0] === EXIT$3) {
+ if (subresult[0] === EXIT$2) {
return subresult
}
@@ -49986,7 +45813,7 @@ function toResult$2(value) {
}
if (typeof value === 'number') {
- return [CONTINUE$3, value]
+ return [CONTINUE$2, value]
}
return [value]
@@ -49999,7 +45826,7 @@ function toResult$2(value) {
* @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult
*/
-const visit$3 =
+const visit$1 =
/**
* @type {(
* (<T extends Node>(tree: Node, test: T['type']|Partial<T>|import('unist-util-is').TestFunctionPredicate<T>|Array.<T['type']|Partial<T>|import('unist-util-is').TestFunctionPredicate<T>>, visitor: Visitor<T>, reverse?: boolean) => void) &
@@ -50023,7 +45850,7 @@ const visit$3 =
test = null;
}
- visitParents$3(tree, test, overload, reverse);
+ visitParents$2(tree, test, overload, reverse);
/**
* @param {Node} node
@@ -50113,7 +45940,7 @@ const visit$3 =
* @property {boolean} state
*/
-const own$4 = {}.hasOwnProperty;
+const own$2 = {}.hasOwnProperty;
/**
* @type {import('unified').Plugin<[Options]>}
@@ -50155,7 +45982,7 @@ function messageControl(options) {
/** @type {Mark[]} */
const globals = [];
- visit$3(tree, options.test, visitor);
+ visit$1(tree, options.test, visitor);
file.messages = file.messages.filter((m) => filter(m));
@@ -50323,7 +46150,7 @@ function messageControl(options) {
// Toggle all known rules.
if (!ruleId) {
for (ruleId in scope) {
- if (own$4.call(scope, ruleId)) {
+ if (own$2.call(scope, ruleId)) {
toggle(point, state, ruleId);
}
}
@@ -50390,7 +46217,7 @@ function detectGaps(tree, file) {
let gap;
// Find all gaps.
- visit$3(tree, one);
+ visit$1(tree, one);
// Get the end of the document.
// This detects if the last node was the last node.
@@ -50608,92 +46435,6 @@ function lintMessageControl() {
}
/**
- * @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(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
*
@@ -50708,13 +46449,13 @@ function wrap(middleware, callback) {
* @returns {void}
*/
-const primitives = new Set(['string', 'number', 'boolean']);
+const primitives$G = new Set(['string', 'number', 'boolean']);
/**
* @param {string} id
* @param {Rule} rule
*/
-function lintRule(id, rule) {
+function lintRule$G(id, rule) {
const parts = id.split(':');
// Possibly useful if externalised later.
/* c8 ignore next */
@@ -50727,7 +46468,7 @@ function lintRule(id, rule) {
/** @type {import('unified').Plugin<[unknown]|void[]>} */
function plugin(raw) {
- const [severity, options] = coerce$2(ruleId, raw);
+ const [severity, options] = coerce$H(ruleId, raw);
if (!severity) return
@@ -50766,7 +46507,7 @@ function lintRule(id, rule) {
* @param {unknown} value
* @returns {SeverityTuple}
*/
-function coerce$2(name, value) {
+function coerce$H(name, value) {
/** @type {unknown[]} */
let result;
@@ -50778,7 +46519,7 @@ function coerce$2(name, value) {
Array.isArray(value) &&
// `isArray(unknown)` is turned into `any[]`:
// type-coverage:ignore-next-line
- primitives.has(typeof value[0])
+ primitives$G.has(typeof value[0])
) {
// `isArray(unknown)` is turned into `any[]`:
// type-coverage:ignore-next-line
@@ -50873,7 +46614,7 @@ function coerce$2(name, value) {
* ```
*/
-const remarkLintFinalNewline = lintRule(
+const remarkLintFinalNewline = lintRule$G(
'remark-lint:final-newline',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(_, file) => {
@@ -50888,6 +46629,134 @@ const remarkLintFinalNewline = lintRule(
var remarkLintFinalNewline$1 = remarkLintFinalNewline;
+/**
+ * @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$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.
+ *
+ * @param {string} name
+ * @param {unknown} value
+ * @returns {SeverityTuple}
+ */
+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];
+ }
+
+ 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 */
@@ -51397,7 +47266,7 @@ var plural = pluralize.exports;
* @param {string} d
* @returns {string}
*/
-function color$2(d) {
+function color$1(d) {
return '\u001B[33m' + d + '\u001B[39m'
}
@@ -51410,15 +47279,15 @@ function color$2(d) {
/**
* Continue traversing as normal
*/
-const CONTINUE$2 = true;
+const CONTINUE$1 = true;
/**
* Do not traverse this node’s children
*/
-const SKIP$2 = 'skip';
+const SKIP$1 = 'skip';
/**
* Stop traversing immediately
*/
-const EXIT$2 = false;
+const EXIT$1 = false;
/**
* Visit children of tree which pass a test
@@ -51428,7 +47297,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$1 =
/**
* @type {(
* (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: Visitor<import('./complex-types').Matches<import('./complex-types').InclusiveDescendant<Tree>, Check>>, reverse?: boolean) => void) &
@@ -51450,7 +47319,7 @@ const visitParents$2 =
test = null;
}
- const is = convert$2(test);
+ const is = convert(test);
const step = reverse ? -1 : 1;
factory(tree, null, [])();
@@ -51478,7 +47347,7 @@ const visitParents$2 =
Object.defineProperty(visit, 'name', {
value:
'node (' +
- color$2(value.type + (name ? '<' + name + '>' : '')) +
+ color$1(value.type + (name ? '<' + name + '>' : '')) +
')'
});
}
@@ -51498,13 +47367,13 @@ const visitParents$2 =
if (!test || is(node, index, parents[parents.length - 1] || null)) {
result = toResult$1(visitor(node, parents));
- if (result[0] === EXIT$2) {
+ if (result[0] === EXIT$1) {
return result
}
}
// @ts-expect-error looks like a parent.
- if (node.children && result[0] !== SKIP$2) {
+ 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.
@@ -51515,7 +47384,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$1) {
return subresult
}
@@ -51540,7 +47409,7 @@ function toResult$1(value) {
}
if (typeof value === 'number') {
- return [CONTINUE$2, value]
+ return [CONTINUE$1, value]
}
return [value]
@@ -51561,7 +47430,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$2 =
+const visit =
/**
* @type {(
* (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: Visitor<import('unist-util-visit-parents/complex-types').Matches<import('unist-util-visit-parents/complex-types').InclusiveDescendant<Tree>, Check>>, reverse?: boolean) => void) &
@@ -51582,7 +47451,7 @@ const visit$2 =
test = null;
}
- visitParents$2(tree, test, overload, reverse);
+ visitParents$1(tree, test, overload, reverse);
/**
* @param {Node} node
@@ -51638,11 +47507,11 @@ const visit$2 =
* 4:2: Incorrect indentation before bullet: remove 1 space
*/
-const remarkLintListItemBulletIndent = lintRule(
+const remarkLintListItemBulletIndent = lintRule$F(
'remark-lint:list-item-bullet-indent',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
- visit$2(tree, 'list', (list, _, grandparent) => {
+ visit(tree, 'list', (list, _, grandparent) => {
let index = -1;
while (++index < list.children.length) {
@@ -51677,6 +47546,134 @@ const remarkLintListItemBulletIndent = lintRule(
var remarkLintListItemBulletIndent$1 = remarkLintListItemBulletIndent;
/**
+ * @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$E = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+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});
+
+ return plugin
+
+ /** @type {import('unified').Plugin<[unknown]|void[]>} */
+ function plugin(raw) {
+ const [severity, options] = coerce$F(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$F(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$E.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').Position} Position
* @typedef {import('unist').Point} Point
*
@@ -51690,15 +47687,15 @@ var remarkLintListItemBulletIndent$1 = remarkLintListItemBulletIndent;
* @property {PositionLike} [position]
*/
-var pointStart = point$2('start');
-var pointEnd = point$2('end');
+var pointStart = point('start');
+var pointEnd = point('end');
/**
* Get the positional info of `node`.
*
* @param {'start'|'end'} type
*/
-function point$2(type) {
+function point(type) {
return point
/**
@@ -51868,7 +47865,7 @@ function generated(node) {
* 1:1: Incorrect list-item indent style `💩`: use either `'tab-size'`, `'space'`, or `'mixed'`
*/
-const remarkLintListItemIndent = lintRule(
+const remarkLintListItemIndent = lintRule$E(
'remark-lint:list-item-indent',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 'tab-size') => {
@@ -51882,7 +47879,7 @@ const remarkLintListItemIndent = lintRule(
);
}
- visit$2(tree, 'list', (node) => {
+ visit(tree, 'list', (node) => {
if (generated(node)) return
const spread = node.spread;
@@ -51926,59 +47923,131 @@ const remarkLintListItemIndent = lintRule(
var remarkLintListItemIndent$1 = remarkLintListItemIndent;
/**
- * @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.
+ * @typedef {import('unist').Node} Node
+ * @typedef {import('vfile').VFile} VFile
*
- * @param {unknown} node
- * @param {Options} [options]
- * @returns {string}
+ * @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 toString(node, options) {
- var {includeImageAlt = true} = options || {};
- return one(node, includeImageAlt)
-}
+
+const primitives$D = new Set(['string', 'number', 'boolean']);
/**
- * @param {unknown} node
- * @param {boolean} includeImageAlt
- * @returns {string}
+ * @param {string} id
+ * @param {Rule} rule
*/
-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 lintRule$D(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$E(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);
+ }
+ }
}
/**
- * @param {Array.<unknown>} values
- * @param {boolean} includeImageAlt
- * @returns {string}
+ * Coerce a value to a severity--options tuple.
+ *
+ * @param {string} name
+ * @param {unknown} value
+ * @returns {SeverityTuple}
*/
-function all(values, includeImageAlt) {
- /** @type {Array.<string>} */
- var result = [];
- var index = -1;
+function coerce$E(name, value) {
+ /** @type {unknown[]} */
+ let result;
- while (++index < values.length) {
- result[index] = one(values[index], includeImageAlt);
+ 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$D.has(typeof value[0])
+ ) {
+ // `isArray(unknown)` is turned into `any[]`:
+ // type-coverage:ignore-next-line
+ result = [...value];
+ } else {
+ result = [1, value];
}
- return result.join('')
+ 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
}
/**
@@ -52023,11 +48092,11 @@ function all(values, includeImageAlt) {
// See: <https://en.wikipedia.org/wiki/URI_scheme#Generic_syntax>.
const protocol = /^[a-z][a-z+.-]+:\/?/i;
-const remarkLintNoAutoLinkWithoutProtocol = lintRule(
+const remarkLintNoAutoLinkWithoutProtocol = lintRule$D(
'remark-lint:no-auto-link-without-protocol',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
- visit$2(tree, 'link', (node) => {
+ visit(tree, 'link', (node) => {
if (
!generated(node) &&
pointStart(node).column === pointStart(node.children[0]).column - 1 &&
@@ -52044,6 +48113,134 @@ const remarkLintNoAutoLinkWithoutProtocol = lintRule(
var remarkLintNoAutoLinkWithoutProtocol$1 = remarkLintNoAutoLinkWithoutProtocol;
/**
+ * @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$C = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$C(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$D(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$D(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$C.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
@@ -52100,14 +48297,14 @@ var remarkLintNoAutoLinkWithoutProtocol$1 = remarkLintNoAutoLinkWithoutProtocol;
* 3:1: Missing marker in block quote
*/
-const remarkLintNoBlockquoteWithoutMarker = lintRule(
+const remarkLintNoBlockquoteWithoutMarker = lintRule$C(
'remark-lint:no-blockquote-without-marker',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
const value = String(file);
const loc = location(file);
- visit$2(tree, 'blockquote', (node) => {
+ visit(tree, 'blockquote', (node) => {
let index = -1;
while (++index < node.children.length) {
@@ -52141,6 +48338,134 @@ const remarkLintNoBlockquoteWithoutMarker = lintRule(
var remarkLintNoBlockquoteWithoutMarker$1 = remarkLintNoBlockquoteWithoutMarker;
/**
+ * @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$B = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+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];
+
+ Object.defineProperty(plugin, 'name', {value: id});
+
+ return plugin
+
+ /** @type {import('unified').Plugin<[unknown]|void[]>} */
+ function plugin(raw) {
+ const [severity, options] = coerce$C(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$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];
+ }
+ }
+
+ 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
@@ -52176,11 +48501,11 @@ var remarkLintNoBlockquoteWithoutMarker$1 = remarkLintNoBlockquoteWithoutMarker;
* 1:1-1:19: Don’t use literal URLs without angle brackets
*/
-const remarkLintNoLiteralUrls = lintRule(
+const remarkLintNoLiteralUrls = lintRule$B(
'remark-lint:no-literal-urls',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
- visit$2(tree, 'link', (node) => {
+ visit(tree, 'link', (node) => {
const value = toString(node);
if (
@@ -52199,6 +48524,134 @@ const remarkLintNoLiteralUrls = lintRule(
var remarkLintNoLiteralUrls$1 = remarkLintNoLiteralUrls;
/**
+ * @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$A = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$A(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$B(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$B(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$A.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
@@ -52255,7 +48708,7 @@ var remarkLintNoLiteralUrls$1 = remarkLintNoLiteralUrls;
* 1:1: Incorrect ordered list item marker style `💩`: use either `'.'` or `')'`
*/
-const remarkLintOrderedListMarkerStyle = lintRule(
+const remarkLintOrderedListMarkerStyle = lintRule$A(
'remark-lint:ordered-list-marker-style',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 'consistent') => {
@@ -52269,7 +48722,7 @@ const remarkLintOrderedListMarkerStyle = lintRule(
);
}
- visit$2(tree, 'list', (node) => {
+ visit(tree, 'list', (node) => {
let index = -1;
if (!node.ordered) return
@@ -52302,6 +48755,134 @@ const remarkLintOrderedListMarkerStyle = lintRule(
var remarkLintOrderedListMarkerStyle$1 = remarkLintOrderedListMarkerStyle;
/**
+ * @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$z = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$z(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$A(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$A(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$z.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
@@ -52327,13 +48908,13 @@ var remarkLintOrderedListMarkerStyle$1 = remarkLintOrderedListMarkerStyle;
* 1:12-2:1: Use two spaces for hard line breaks
*/
-const remarkLintHardBreakSpaces = lintRule(
+const remarkLintHardBreakSpaces = lintRule$z(
'remark-lint:hard-break-spaces',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
const value = String(file);
- visit$2(tree, 'break', (node) => {
+ visit(tree, 'break', (node) => {
if (!generated(node)) {
const slice = value
.slice(pointStart(node).offset, pointEnd(node).offset)
@@ -52350,71 +48931,132 @@ const remarkLintHardBreakSpaces = lintRule(
var remarkLintHardBreakSpaces$1 = remarkLintHardBreakSpaces;
-var own$3 = {}.hasOwnProperty;
-
/**
* @typedef {import('unist').Node} Node
- * @typedef {import('unist').Position} Position
- * @typedef {import('unist').Point} Point
+ * @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$y = new Set(['string', 'number', 'boolean']);
+
/**
- * Stringify one point, a position (start and end points), or a node’s
- * positional information.
- *
- * @param {Node|Position|Point} [value]
- * @returns {string}
+ * @param {string} id
+ * @param {Rule} rule
*/
-function stringifyPosition$1(value) {
- // Nothing.
- if (!value || typeof value !== 'object') {
- return ''
- }
+function lintRule$y(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];
- // Node.
- if (own$3.call(value, 'position') || own$3.call(value, 'type')) {
- // @ts-ignore looks like a node.
- return position$3(value.position)
- }
+ Object.defineProperty(plugin, 'name', {value: id});
- // Position.
- if (own$3.call(value, 'start') || own$3.call(value, 'end')) {
- // @ts-ignore looks like a position.
- return position$3(value)
- }
+ return plugin
- // Point.
- if (own$3.call(value, 'line') || own$3.call(value, 'column')) {
- // @ts-ignore looks like a point.
- return point$1(value)
- }
+ /** @type {import('unified').Plugin<[unknown]|void[]>} */
+ function plugin(raw) {
+ const [severity, options] = coerce$z(ruleId, raw);
- // ?
- return ''
-}
+ if (!severity) return
-/**
- * @param {Point} point
- * @returns {string}
- */
-function point$1(point) {
- return index$1(point && point.line) + ':' + index$1(point && point.column)
-}
+ const fatal = severity === 2;
-/**
- * @param {Position} pos
- * @returns {string}
- */
-function position$3(pos) {
- return point$1(pos && pos.start) + '-' + point$1(pos && pos.end)
+ 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);
+ }
+ }
}
/**
- * @param {number} value
- * @returns {number}
+ * Coerce a value to a severity--options tuple.
+ *
+ * @param {string} name
+ * @param {unknown} value
+ * @returns {SeverityTuple}
*/
-function index$1(value) {
- return value && typeof value === 'number' ? value : 1
+function coerce$z(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$y.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
}
/**
@@ -52443,14 +49085,14 @@ function index$1(value) {
* 2:1-2:11: Do not use definitions with the same identifier (1:1)
*/
-const remarkLintNoDuplicateDefinitions = lintRule(
+const remarkLintNoDuplicateDefinitions = lintRule$y(
'remark-lint:no-duplicate-definitions',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
/** @type {Record<string, string>} */
const map = Object.create(null);
- visit$2(tree, (node) => {
+ visit(tree, (node) => {
if (
(node.type === 'definition' || node.type === 'footnoteDefinition') &&
!generated(node)
@@ -52476,6 +49118,134 @@ const remarkLintNoDuplicateDefinitions = lintRule(
var remarkLintNoDuplicateDefinitions$1 = remarkLintNoDuplicateDefinitions;
/**
+ * @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$x = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$x(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$y(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$y(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$x.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('mdast').Heading} Heading
* @typedef {'atx'|'atx-closed'|'setext'} Style
*/
@@ -52584,11 +49354,11 @@ function consolidate(depth, relative) {
* #··
*/
-const remarkLintNoHeadingContentIndent = lintRule(
+const remarkLintNoHeadingContentIndent = lintRule$x(
'remark-lint:no-heading-content-indent',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
- visit$2(tree, 'heading', (node) => {
+ visit(tree, 'heading', (node) => {
if (generated(node)) {
return
}
@@ -52641,6 +49411,134 @@ const remarkLintNoHeadingContentIndent = lintRule(
var remarkLintNoHeadingContentIndent$1 = remarkLintNoHeadingContentIndent;
/**
+ * @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$w = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$w(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$x(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$x(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$w.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
@@ -52667,13 +49565,13 @@ var remarkLintNoHeadingContentIndent$1 = remarkLintNoHeadingContentIndent;
* 1:7-1:38: Don’t pad `link` with inner spaces
*/
-const remarkLintNoInlinePadding = lintRule(
+const remarkLintNoInlinePadding = lintRule$w(
'remark-lint:no-inline-padding',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
// Note: `emphasis`, `strong`, `delete` (GFM) can’t have padding anymore
// since CM.
- visit$2(tree, (node) => {
+ visit(tree, (node) => {
if (
(node.type === 'link' || node.type === 'linkReference') &&
!generated(node)
@@ -52691,6 +49589,134 @@ const remarkLintNoInlinePadding = lintRule(
var remarkLintNoInlinePadding$1 = remarkLintNoInlinePadding;
/**
+ * @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$v = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$v(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$w(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$w(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$v.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
@@ -52724,11 +49750,11 @@ var remarkLintNoInlinePadding$1 = remarkLintNoInlinePadding;
* 1:1-1:7: Use the trailing [] on reference images
*/
-const remarkLintNoShortcutReferenceImage = lintRule(
+const remarkLintNoShortcutReferenceImage = lintRule$v(
'remark-lint:no-shortcut-reference-image',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
- visit$2(tree, 'imageReference', (node) => {
+ visit(tree, 'imageReference', (node) => {
if (!generated(node) && node.referenceType === 'shortcut') {
file.message('Use the trailing [] on reference images', node);
}
@@ -52739,6 +49765,134 @@ const remarkLintNoShortcutReferenceImage = lintRule(
var remarkLintNoShortcutReferenceImage$1 = remarkLintNoShortcutReferenceImage;
/**
+ * @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$u = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$u(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$v(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$v(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$u.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
@@ -52772,11 +49926,11 @@ var remarkLintNoShortcutReferenceImage$1 = remarkLintNoShortcutReferenceImage;
* 1:1-1:6: Use the trailing `[]` on reference links
*/
-const remarkLintNoShortcutReferenceLink = lintRule(
+const remarkLintNoShortcutReferenceLink = lintRule$u(
'remark-lint:no-shortcut-reference-link',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
- visit$2(tree, 'linkReference', (node) => {
+ visit(tree, 'linkReference', (node) => {
if (!generated(node) && node.referenceType === 'shortcut') {
file.message('Use the trailing `[]` on reference links', node);
}
@@ -52787,24 +49941,131 @@ const remarkLintNoShortcutReferenceLink = lintRule(
var remarkLintNoShortcutReferenceLink$1 = remarkLintNoShortcutReferenceLink;
/**
- * Normalize an identifier (such as used in definitions).
+ * @typedef {import('unist').Node} Node
+ * @typedef {import('vfile').VFile} VFile
*
- * @param {string} value
- * @returns {string}
+ * @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 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()
- )
+
+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$u(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$u(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
}
/**
@@ -52875,7 +50136,7 @@ function normalizeIdentifier(value) {
* 17:23-17:26: Found reference to undefined definition
*/
-const remarkLintNoUndefinedReferences = lintRule(
+const remarkLintNoUndefinedReferences = lintRule$t(
'remark-lint:no-undefined-references',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = {}) => {
@@ -52888,7 +50149,7 @@ const remarkLintNoUndefinedReferences = lintRule(
/** @type {Record<string, boolean>} */
const map = Object.create(null);
- visit$2(tree, (node) => {
+ visit(tree, (node) => {
if (
(node.type === 'definition' || node.type === 'footnoteDefinition') &&
!generated(node)
@@ -52897,7 +50158,7 @@ const remarkLintNoUndefinedReferences = lintRule(
}
});
- visit$2(tree, (node) => {
+ visit(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 */
@@ -52924,14 +50185,14 @@ const remarkLintNoUndefinedReferences = lintRule(
/** @type {Range[]} */
let ranges = [];
- visit$2(node, (child) => {
+ visit(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$2
+ return SKIP$1
}
// Enter non-text.
@@ -52942,7 +50203,7 @@ const remarkLintNoUndefinedReferences = lintRule(
// Bail if there’s no positional info.
if (typeof start !== 'number' || typeof end !== 'number') {
- return EXIT$2
+ return EXIT$1
}
const source = contents.slice(start, end);
@@ -53040,7 +50301,7 @@ const remarkLintNoUndefinedReferences = lintRule(
handleRange(ranges[index]);
}
- return SKIP$2
+ return SKIP$1
/**
* @param {Range} range
@@ -53076,6 +50337,134 @@ const remarkLintNoUndefinedReferences = lintRule(
var remarkLintNoUndefinedReferences$1 = remarkLintNoUndefinedReferences;
/**
+ * @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$s = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$s(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(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$s.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 2016 Titus Wormer
* @license MIT
@@ -53101,16 +50490,16 @@ var remarkLintNoUndefinedReferences$1 = remarkLintNoUndefinedReferences;
* 1:1-1:27: Found unused definition
*/
-const own$2 = {}.hasOwnProperty;
+const own$1 = {}.hasOwnProperty;
-const remarkLintNoUnusedDefinitions = lintRule(
+const remarkLintNoUnusedDefinitions = lintRule$s(
'remark-lint:no-unused-definitions',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
/** @type {Record<string, {node: DefinitionContent, used: boolean}>} */
const map = Object.create(null);
- visit$2(tree, (node) => {
+ visit(tree, (node) => {
if (
(node.type === 'definition' || node.type === 'footnoteDefinition') &&
!generated(node)
@@ -53119,7 +50508,7 @@ const remarkLintNoUnusedDefinitions = lintRule(
}
});
- visit$2(tree, (node) => {
+ visit(tree, (node) => {
if (
node.type === 'imageReference' ||
node.type === 'linkReference' ||
@@ -53137,7 +50526,7 @@ const remarkLintNoUnusedDefinitions = lintRule(
let identifier;
for (identifier in map) {
- if (own$2.call(map, identifier)) {
+ if (own$1.call(map, identifier)) {
const entry = map[identifier];
if (!entry.used) {
@@ -53156,35 +50545,162 @@ var remarkLintNoUnusedDefinitions$1 = remarkLintNoUnusedDefinitions;
* mistakes or stuff that fails across vendors.
*/
-/** @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
- ]
-};
+const plugins$1 = [
+ 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
+];
+
+const remarkPresetLintRecommended = {plugins: plugins$1};
var remarkPresetLintRecommended$1 = remarkPresetLintRecommended;
/**
+ * @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$r = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$r(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$s(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$s(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$r.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
@@ -53234,11 +50750,11 @@ var remarkPresetLintRecommended$1 = remarkPresetLintRecommended;
* 9:3: Add 1 space between block quote and content
*/
-const remarkLintBlockquoteIndentation = lintRule(
+const remarkLintBlockquoteIndentation = lintRule$r(
'remark-lint:blockquote-indentation',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 'consistent') => {
- visit$2(tree, 'blockquote', (node) => {
+ visit(tree, 'blockquote', (node) => {
if (generated(node) || node.children.length === 0) {
return
}
@@ -53277,6 +50793,134 @@ function check(node) {
}
/**
+ * @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$q = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$q(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$r(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$r(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$q.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
@@ -53355,7 +50999,7 @@ function check(node) {
* 1:1: Incorrect checked checkbox marker `💩`: use either `'x'`, or `'X'`
*/
-const remarkLintCheckboxCharacterStyle = lintRule(
+const remarkLintCheckboxCharacterStyle = lintRule$q(
'remark-lint:checkbox-character-style',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 'consistent') => {
@@ -53386,7 +51030,7 @@ const remarkLintCheckboxCharacterStyle = lintRule(
);
}
- visit$2(tree, 'listItem', (node) => {
+ visit(tree, 'listItem', (node) => {
const head = node.children[0];
const point = pointStart(head);
@@ -53439,6 +51083,134 @@ const remarkLintCheckboxCharacterStyle = lintRule(
var remarkLintCheckboxCharacterStyle$1 = remarkLintCheckboxCharacterStyle;
/**
+ * @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$p = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$p(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$q(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$q(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$p.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
@@ -53470,14 +51242,14 @@ var remarkLintCheckboxCharacterStyle$1 = remarkLintCheckboxCharacterStyle;
* 4:7-4:10: Checkboxes should be followed by a single character
*/
-const remarkLintCheckboxContentIndent = lintRule(
+const remarkLintCheckboxContentIndent = lintRule$p(
'remark-lint:checkbox-content-indent',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
const value = String(file);
const loc = location(file);
- visit$2(tree, 'listItem', (node) => {
+ visit(tree, 'listItem', (node) => {
const head = node.children[0];
const point = pointStart(head);
@@ -53519,6 +51291,134 @@ const remarkLintCheckboxContentIndent = lintRule(
var remarkLintCheckboxContentIndent$1 = remarkLintCheckboxContentIndent;
/**
+ * @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$o = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$o(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$p(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$p(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$o.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
@@ -53621,7 +51521,7 @@ var remarkLintCheckboxContentIndent$1 = remarkLintCheckboxContentIndent;
* 1:1: Incorrect code block style `💩`: use either `'consistent'`, `'fenced'`, or `'indented'`
*/
-const remarkLintCodeBlockStyle = lintRule(
+const remarkLintCodeBlockStyle = lintRule$o(
'remark-lint:code-block-style',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 'consistent') => {
@@ -53639,7 +51539,7 @@ const remarkLintCodeBlockStyle = lintRule(
);
}
- visit$2(tree, 'code', (node) => {
+ visit(tree, 'code', (node) => {
if (generated(node)) {
return
}
@@ -53664,6 +51564,134 @@ const remarkLintCodeBlockStyle = lintRule(
var remarkLintCodeBlockStyle$1 = remarkLintCodeBlockStyle;
/**
+ * @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$n = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$n(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$o(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$o(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$n.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
@@ -53689,13 +51717,13 @@ var remarkLintCodeBlockStyle$1 = remarkLintCodeBlockStyle;
const label = /^\s*\[((?:\\[\s\S]|[^[\]])+)]/;
-const remarkLintDefinitionSpacing = lintRule(
+const remarkLintDefinitionSpacing = lintRule$n(
'remark-lint:definition-spacing',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
const value = String(file);
- visit$2(tree, (node) => {
+ visit(tree, (node) => {
if (node.type === 'definition' || node.type === 'footnoteDefinition') {
const start = pointStart(node).offset;
const end = pointEnd(node).offset;
@@ -53718,6 +51746,134 @@ const remarkLintDefinitionSpacing = lintRule(
var remarkLintDefinitionSpacing$1 = remarkLintDefinitionSpacing;
/**
+ * @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$m = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$m(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$n(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$n(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$m.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
@@ -53801,7 +51957,7 @@ var remarkLintDefinitionSpacing$1 = remarkLintDefinitionSpacing;
const fence = /^ {0,3}([~`])\1{2,}/;
-const remarkLintFencedCodeFlag = lintRule(
+const remarkLintFencedCodeFlag = lintRule$m(
'remark-lint:fenced-code-flag',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option) => {
@@ -53822,7 +51978,7 @@ const remarkLintFencedCodeFlag = lintRule(
}
}
- visit$2(tree, 'code', (node) => {
+ visit(tree, 'code', (node) => {
if (!generated(node)) {
if (node.lang) {
if (allowed.length > 0 && !allowed.includes(node.lang)) {
@@ -53846,6 +52002,134 @@ const remarkLintFencedCodeFlag = lintRule(
var remarkLintFencedCodeFlag$1 = remarkLintFencedCodeFlag;
/**
+ * @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$l = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$l(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$m(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$m(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$l.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
@@ -53936,7 +52220,7 @@ var remarkLintFencedCodeFlag$1 = remarkLintFencedCodeFlag;
* 1:1: Incorrect fenced code marker `💩`: use either `'consistent'`, `` '`' ``, or `'~'`
*/
-const remarkLintFencedCodeMarker = lintRule(
+const remarkLintFencedCodeMarker = lintRule$l(
'remark-lint:fenced-code-marker',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 'consistent') => {
@@ -53950,7 +52234,7 @@ const remarkLintFencedCodeMarker = lintRule(
);
}
- visit$2(tree, 'code', (node) => {
+ visit(tree, 'code', (node) => {
const start = pointStart(node).offset;
if (typeof start === 'number') {
@@ -53980,6 +52264,134 @@ const remarkLintFencedCodeMarker = lintRule(
var remarkLintFencedCodeMarker$1 = remarkLintFencedCodeMarker;
/**
+ * @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$k = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$k(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$l(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$l(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$k.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
@@ -54007,7 +52419,7 @@ var remarkLintFencedCodeMarker$1 = remarkLintFencedCodeMarker;
* {"name": "readme.mkd", "setting": "mkd"}
*/
-const remarkLintFileExtension = lintRule(
+const remarkLintFileExtension = lintRule$k(
'remark-lint:file-extension',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(_, file, option = 'md') => {
@@ -54022,6 +52434,134 @@ const remarkLintFileExtension = lintRule(
var remarkLintFileExtension$1 = remarkLintFileExtension;
/**
+ * @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$j = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$j(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$k(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$k(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$j.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
@@ -54063,13 +52603,13 @@ var remarkLintFileExtension$1 = remarkLintFileExtension;
* [example-2]: http://example.com/two/
*/
-const remarkLintFinalDefinition = lintRule(
+const remarkLintFinalDefinition = lintRule$j(
'remark-lint:final-definition',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
let last = 0;
- visit$2(
+ visit(
tree,
(node) => {
// Ignore generated and HTML comment nodes.
@@ -54104,6 +52644,134 @@ const remarkLintFinalDefinition = lintRule(
var remarkLintFinalDefinition$1 = remarkLintFinalDefinition;
/**
+ * @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$i = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$i(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$j(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$j(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$i.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
@@ -54195,13 +52863,13 @@ var remarkLintFinalDefinition$1 = remarkLintFinalDefinition;
* 1:1-1:14: First heading level should be `2`
*/
-const re$3 = /<h([1-6])/;
+const re = /<h([1-6])/;
-const remarkLintFirstHeadingLevel = lintRule(
+const remarkLintFirstHeadingLevel = lintRule$i(
'remark-lint:first-heading-level',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 1) => {
- visit$2(tree, (node) => {
+ visit(tree, (node) => {
if (!generated(node)) {
/** @type {Depth|undefined} */
let rank;
@@ -54217,7 +52885,7 @@ const remarkLintFirstHeadingLevel = lintRule(
file.message('First heading level should be `' + option + '`', node);
}
- return EXIT$2
+ return EXIT$1
}
}
});
@@ -54231,12 +52899,140 @@ var remarkLintFirstHeadingLevel$1 = remarkLintFirstHeadingLevel;
* @returns {Depth|undefined}
*/
function infer(node) {
- const results = node.value.match(re$3);
+ const results = node.value.match(re);
// @ts-expect-error: can be castes fine.
return results ? Number(results[1]) : undefined
}
/**
+ * @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$h = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$h(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$i(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$i(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$h.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
@@ -54314,7 +53110,7 @@ function infer(node) {
* 1:1: Incorrect heading style type `💩`: use either `'consistent'`, `'atx'`, `'atx-closed'`, or `'setext'`
*/
-const remarkLintHeadingStyle = lintRule(
+const remarkLintHeadingStyle = lintRule$h(
'remark-lint:heading-style',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 'consistent') => {
@@ -54331,7 +53127,7 @@ const remarkLintHeadingStyle = lintRule(
);
}
- visit$2(tree, 'heading', (node) => {
+ visit(tree, 'heading', (node) => {
if (!generated(node)) {
if (option === 'consistent') {
// Funky nodes perhaps cannot be detected.
@@ -54348,6 +53144,134 @@ const remarkLintHeadingStyle = lintRule(
var remarkLintHeadingStyle$1 = remarkLintHeadingStyle;
/**
+ * @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$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.
+ *
+ * @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
@@ -54445,14 +53369,14 @@ var remarkLintHeadingStyle$1 = remarkLintHeadingStyle;
* 4:12: Line must be at most 10 characters
*/
-const remarkLintMaximumLineLength = lintRule(
+const remarkLintMaximumLineLength = lintRule$g(
'remark-lint:maximum-line-length',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 80) => {
const value = String(file);
const lines = value.split(/\r?\n/);
- visit$2(tree, (node) => {
+ visit(tree, (node) => {
if (
(node.type === 'heading' ||
node.type === 'table' ||
@@ -54474,7 +53398,7 @@ const remarkLintMaximumLineLength = lintRule(
// the wrap.
// However, when they do, and there’s whitespace after it, they are not
// allowed.
- visit$2(tree, (node, pos, parent_) => {
+ visit(tree, (node, pos, parent_) => {
const parent = /** @type {Parent} */ (parent_);
if (
@@ -54539,6 +53463,134 @@ const remarkLintMaximumLineLength = lintRule(
var remarkLintMaximumLineLength$1 = remarkLintMaximumLineLength;
/**
+ * @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$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.
+ *
+ * @param {string} name
+ * @param {unknown} value
+ * @returns {SeverityTuple}
+ */
+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];
+ }
+
+ 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
@@ -54584,11 +53636,11 @@ var remarkLintMaximumLineLength$1 = remarkLintMaximumLineLength;
* 4:5: Remove 2 lines after node
*/
-const remarkLintNoConsecutiveBlankLines = lintRule(
+const remarkLintNoConsecutiveBlankLines = lintRule$f(
'remark-lint:no-consecutive-blank-lines',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
- visit$2(tree, (node) => {
+ visit(tree, (node) => {
if (!generated(node) && 'children' in node) {
const head = node.children[0];
@@ -54649,6 +53701,134 @@ const remarkLintNoConsecutiveBlankLines = lintRule(
var remarkLintNoConsecutiveBlankLines$1 = remarkLintNoConsecutiveBlankLines;
/**
+ * @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$e = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+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});
+
+ return plugin
+
+ /** @type {import('unified').Plugin<[unknown]|void[]>} */
+ function plugin(raw) {
+ const [severity, options] = coerce$f(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$f(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$e.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
@@ -54680,7 +53860,7 @@ var remarkLintNoConsecutiveBlankLines$1 = remarkLintNoConsecutiveBlankLines;
* 1:1: Do not start file names with `an`
*/
-const remarkLintNoFileNameArticles = lintRule(
+const remarkLintNoFileNameArticles = lintRule$e(
'remark-lint:no-file-name-articles',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(_, file) => {
@@ -54695,6 +53875,134 @@ const remarkLintNoFileNameArticles = lintRule(
var remarkLintNoFileNameArticles$1 = remarkLintNoFileNameArticles;
/**
+ * @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$d = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$d(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$e(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$e(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$d.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
@@ -54711,7 +54019,7 @@ var remarkLintNoFileNameArticles$1 = remarkLintNoFileNameArticles;
* 1:1: Do not use consecutive dashes in a file name
*/
-const remarkLintNoFileNameConsecutiveDashes = lintRule(
+const remarkLintNoFileNameConsecutiveDashes = lintRule$d(
'remark-lint:no-file-name-consecutive-dashes',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(_, file) => {
@@ -54724,6 +54032,134 @@ const remarkLintNoFileNameConsecutiveDashes = lintRule(
var remarkLintNoFileNameConsecutiveDashes$1 = remarkLintNoFileNameConsecutiveDashes;
/**
+ * @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$c = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$c(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$d(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$d(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$c.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
@@ -54745,7 +54181,7 @@ var remarkLintNoFileNameConsecutiveDashes$1 = remarkLintNoFileNameConsecutiveDas
* 1:1: Do not use initial or final dashes in a file name
*/
-const remarkLintNofileNameOuterDashes = lintRule(
+const remarkLintNofileNameOuterDashes = lintRule$c(
'remark-lint:no-file-name-outer-dashes',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(_, file) => {
@@ -54758,6 +54194,134 @@ const remarkLintNofileNameOuterDashes = lintRule(
var remarkLintNofileNameOuterDashes$1 = remarkLintNofileNameOuterDashes;
/**
+ * @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$b = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+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];
+
+ Object.defineProperty(plugin, 'name', {value: id});
+
+ return plugin
+
+ /** @type {import('unified').Plugin<[unknown]|void[]>} */
+ function plugin(raw) {
+ const [severity, options] = coerce$c(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$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];
+ }
+ }
+
+ 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
@@ -54808,11 +54372,11 @@ var remarkLintNofileNameOuterDashes$1 = remarkLintNofileNameOuterDashes;
* 8:4: Remove 3 spaces before this heading
*/
-const remarkLintNoHeadingIndent = lintRule(
+const remarkLintNoHeadingIndent = lintRule$b(
'remark-lint:no-heading-indent',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
- visit$2(tree, 'heading', (node, _, parent) => {
+ visit(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')) {
@@ -54837,71 +54401,132 @@ const remarkLintNoHeadingIndent = lintRule(
var remarkLintNoHeadingIndent$1 = remarkLintNoHeadingIndent;
-var own$1 = {}.hasOwnProperty;
-
/**
* @typedef {import('unist').Node} Node
- * @typedef {import('unist').Position} Position
- * @typedef {import('unist').Point} Point
+ * @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$a = new Set(['string', 'number', 'boolean']);
+
/**
- * Stringify one point, a position (start and end points), or a node’s
- * positional information.
- *
- * @param {Node|Position|Point} [value]
- * @returns {string}
+ * @param {string} id
+ * @param {Rule} rule
*/
-function stringifyPosition(value) {
- // Nothing.
- if (!value || typeof value !== 'object') {
- return ''
- }
+function lintRule$a(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];
- // Node.
- if (own$1.call(value, 'position') || own$1.call(value, 'type')) {
- // @ts-ignore looks like a node.
- return position$2(value.position)
- }
+ Object.defineProperty(plugin, 'name', {value: id});
- // Position.
- if (own$1.call(value, 'start') || own$1.call(value, 'end')) {
- // @ts-ignore looks like a position.
- return position$2(value)
- }
+ return plugin
- // Point.
- if (own$1.call(value, 'line') || own$1.call(value, 'column')) {
- // @ts-ignore looks like a point.
- return point(value)
- }
+ /** @type {import('unified').Plugin<[unknown]|void[]>} */
+ function plugin(raw) {
+ const [severity, options] = coerce$b(ruleId, raw);
- // ?
- return ''
-}
+ if (!severity) return
-/**
- * @param {Point} point
- * @returns {string}
- */
-function point(point) {
- return index(point && point.line) + ':' + index(point && point.column)
-}
+ const fatal = severity === 2;
-/**
- * @param {Position} pos
- * @returns {string}
- */
-function position$2(pos) {
- return point(pos && pos.start) + '-' + point(pos && pos.end)
+ 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);
+ }
+ }
}
/**
- * @param {number} value
- * @returns {number}
+ * Coerce a value to a severity--options tuple.
+ *
+ * @param {string} name
+ * @param {unknown} value
+ * @returns {SeverityTuple}
*/
-function index(value) {
- return value && typeof value === 'number' ? value : 1
+function coerce$b(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$a.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
}
/**
@@ -54934,14 +54559,14 @@ function index(value) {
* 3:1-3:6: Don’t use multiple top level headings (1:1)
*/
-const remarkLintNoMultipleToplevelHeadings = lintRule(
+const remarkLintNoMultipleToplevelHeadings = lintRule$a(
'remark-lint:no-multiple-toplevel-headings',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 1) => {
/** @type {string|undefined} */
let duplicate;
- visit$2(tree, 'heading', (node) => {
+ visit(tree, 'heading', (node) => {
if (!generated(node) && node.depth === option) {
if (duplicate) {
file.message(
@@ -54949,7 +54574,7 @@ const remarkLintNoMultipleToplevelHeadings = lintRule(
node
);
} else {
- duplicate = stringifyPosition(pointStart(node));
+ duplicate = stringifyPosition$1(pointStart(node));
}
}
});
@@ -54959,6 +54584,134 @@ const remarkLintNoMultipleToplevelHeadings = lintRule(
var remarkLintNoMultipleToplevelHeadings$1 = remarkLintNoMultipleToplevelHeadings;
/**
+ * @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$9 = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$9(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$a(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$a(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$9.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
@@ -55032,11 +54785,11 @@ const flags = new Set([
'zsh'
]);
-const remarkLintNoShellDollars = lintRule(
+const remarkLintNoShellDollars = lintRule$9(
'remark-lint:no-shell-dollars',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
- visit$2(tree, 'code', (node) => {
+ visit(tree, 'code', (node) => {
// Check both known shell code and unknown code.
if (!generated(node) && node.lang && flags.has(node.lang)) {
const lines = node.value
@@ -55065,6 +54818,134 @@ const remarkLintNoShellDollars = lintRule(
var remarkLintNoShellDollars$1 = remarkLintNoShellDollars;
/**
+ * @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$8 = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$8(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$9(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$9(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$8.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
@@ -55130,14 +55011,14 @@ var remarkLintNoShellDollars$1 = remarkLintNoShellDollars;
* 3:6: Do not indent table rows
*/
-const remarkLintNoTableIndentation = lintRule(
+const remarkLintNoTableIndentation = lintRule$8(
'remark-lint:no-table-indentation',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
const value = String(file);
const loc = location(value);
- visit$2(tree, 'table', (node, _, parent) => {
+ visit(tree, 'table', (node, _, parent) => {
const end = pointEnd(node).line;
let line = pointStart(node).line;
let column = 0;
@@ -55184,7 +55065,7 @@ const remarkLintNoTableIndentation = lintRule(
line++;
}
- return SKIP$2
+ return SKIP$1
});
}
);
@@ -55192,6 +55073,134 @@ const remarkLintNoTableIndentation = lintRule(
var remarkLintNoTableIndentation$1 = remarkLintNoTableIndentation;
/**
+ * @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$7 = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$7(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$8(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$8(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$7.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
@@ -55246,7 +55255,7 @@ var remarkLintNoTableIndentation$1 = remarkLintNoTableIndentation;
* 13:41: Use spaces instead of tabs
*/
-const remarkLintNoTabs = lintRule(
+const remarkLintNoTabs = lintRule$7(
'remark-lint:no-tabs',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(_, file) => {
@@ -55432,7 +55441,7 @@ function toThunk(obj, ctx) {
return obj;
}
- if (isObject$1(obj) || Array.isArray(obj)) {
+ if (isObject(obj) || Array.isArray(obj)) {
return objectToThunk.call(ctx, obj);
}
@@ -55566,7 +55575,7 @@ function isGeneratorFunction(obj) {
* @api private
*/
-function isObject$1(val) {
+function isObject(val) {
return val && Object == val.constructor;
}
@@ -55601,7 +55610,7 @@ var co = co_1;
* Export `wrapped`
*/
-var wrapped_1 = wrapped$2;
+var wrapped_1 = wrapped$1;
/**
* Wrap a function to support
@@ -55612,7 +55621,7 @@ var wrapped_1 = wrapped$2;
* @api public
*/
-function wrapped$2(fn) {
+function wrapped$1(fn) {
function wrap() {
var args = sliced(arguments);
var last = args[args.length - 1];
@@ -55702,15 +55711,15 @@ function promise(value) {
return value && 'function' == typeof value.then;
}
-var wrapped$1 = wrapped_1;
+var wrapped = wrapped_1;
-var unifiedLintRule$1 = factory$3;
+var unifiedLintRule = factory;
-function factory$3(id, rule) {
+function factory(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) {
@@ -55723,7 +55732,7 @@ function factory$3(id, rule) {
return attacher
function attacher(raw) {
- var config = coerce$1(ruleId, raw);
+ var config = coerce$7(ruleId, raw);
var severity = config[0];
var options = config[1];
var fatal = severity === 2;
@@ -55763,7 +55772,7 @@ function factory$3(id, rule) {
}
// Coerce a value to a severity--options tuple.
-function coerce$1(name, value) {
+function coerce$7(name, value) {
var def = 1;
var result;
var level;
@@ -55817,9 +55826,9 @@ function coerce$1(name, value) {
return result
}
-var rule$1 = unifiedLintRule$1;
+var rule = unifiedLintRule;
-var remarkLintNoTrailingSpaces = rule$1('remark-lint:no-trailing-spaces', noTrailingSpaces);
+var remarkLintNoTrailingSpaces = rule('remark-lint:no-trailing-spaces', noTrailingSpaces);
/**
* Lines that are just space characters are not present in
@@ -55842,4480 +55851,177 @@ function noTrailingSpaces(ast, file) {
}
}
-function* getLinksRecursively(node) {
- if (node.url) {
- yield node;
- }
- for (const child of node.children || []) {
- yield* getLinksRecursively(child);
- }
-}
-
-function validateLinks(tree, vfile) {
- 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:" && !require$$0__default$3['default'].existsSync(targetURL)) {
- vfile.message("Broken link", node);
- } else if (targetURL.pathname === currentFileURL.pathname) {
- const expected = node.url.includes("#")
- ? node.url.slice(node.url.indexOf("#"))
- : "#";
- vfile.message(
- `Self-reference must start with hash (expected "${expected}", got "${node.url}")`,
- node
- );
- }
- }
- if (node.type === "definition") {
- if (previousDefinitionLabel && previousDefinitionLabel > node.label) {
- vfile.message(
- `Unordered reference ("${node.label}" should be before "${previousDefinitionLabel}")`,
- node
- );
- }
- previousDefinitionLabel = node.label;
- }
- }
-}
-
-const remarkLintNodejsLinks = lintRule(
- "remark-lint:nodejs-links",
- validateLinks
-);
-
-/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */
-function isNothing(subject) {
- return (typeof subject === 'undefined') || (subject === null);
-}
-
-
-function isObject(subject) {
- return (typeof subject === 'object') && (subject !== null);
-}
-
-
-function toArray(sequence) {
- if (Array.isArray(sequence)) return sequence;
- else if (isNothing(sequence)) return [];
-
- return [ sequence ];
-}
-
-
-function extend(target, source) {
- var index, length, key, sourceKeys;
-
- if (source) {
- sourceKeys = Object.keys(source);
-
- for (index = 0, length = sourceKeys.length; index < length; index += 1) {
- key = sourceKeys[index];
- target[key] = source[key];
- }
- }
-
- return target;
-}
-
-
-function repeat(string, count) {
- var result = '', cycle;
-
- for (cycle = 0; cycle < count; cycle += 1) {
- result += string;
- }
-
- return result;
-}
-
-
-function isNegativeZero(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;
-
-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 formatError(exception, compact) {
- var where = '', message = exception.reason || '(unknown reason)';
-
- if (!exception.mark) return message;
-
- if (exception.mark.name) {
- where += 'in "' + exception.mark.name + '" ';
- }
-
- where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';
-
- if (!compact && exception.mark.snippet) {
- where += '\n\n' + exception.mark.snippet;
- }
-
- return message + ' ' + where;
-}
-
-
-function YAMLException$1(reason, mark) {
- // Super constructor
- Error.call(this);
-
- this.name = 'YAMLException';
- this.reason = reason;
- this.mark = mark;
- this.message = formatError(this, false);
-
- // 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 || '';
- }
-}
-
-
-// Inherit from Error
-YAMLException$1.prototype = Object.create(Error.prototype);
-YAMLException$1.prototype.constructor = YAMLException$1;
-
-
-YAMLException$1.prototype.toString = function toString(compact) {
- return this.name + ': ' + formatError(this, compact);
-};
-
-
-var exception = YAMLException$1;
-
-// 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;
-
- if (position - lineStart > maxHalfLength) {
- head = ' ... ';
- lineStart = position - maxHalfLength + head.length;
- }
-
- if (lineEnd - position > maxHalfLength) {
- tail = ' ...';
- lineEnd = position + maxHalfLength - tail.length;
- }
-
- return {
- str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail,
- pos: position - lineStart + head.length // relative position
- };
-}
-
-
-function padStart(string, max) {
- return common.repeat(' ', max - string.length) + string;
-}
-
-
-function makeSnippet(mark, options) {
- options = Object.create(options || null);
-
- if (!mark.buffer) 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;
-
- var re = /\r?\n|\r|\0/g;
- var lineStarts = [ 0 ];
- var lineEnds = [];
- var match;
- var foundLineNo = -1;
-
- while ((match = re.exec(mark.buffer))) {
- lineEnds.push(match.index);
- lineStarts.push(match.index + match[0].length);
-
- if (mark.position <= match.index && foundLineNo < 0) {
- foundLineNo = lineStarts.length - 2;
- }
- }
-
- if (foundLineNo < 0) foundLineNo = lineStarts.length - 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);
-
- 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.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.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) +
- ' | ' + line.str + '\n';
- result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n';
-
- 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.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) +
- ' | ' + line.str + '\n';
- }
-
- return result.replace(/\n$/, '');
-}
-
-
-var snippet = makeSnippet;
-
-var TYPE_CONSTRUCTOR_OPTIONS = [
- 'kind',
- 'multi',
- 'resolve',
- 'construct',
- 'instanceOf',
- 'predicate',
- 'represent',
- 'representName',
- 'defaultStyle',
- 'styleAliases'
-];
-
-var YAML_NODE_KINDS = [
- 'scalar',
- 'sequence',
- 'mapping'
-];
-
-function compileStyleAliases(map) {
- var result = {};
-
- if (map !== null) {
- Object.keys(map).forEach(function (style) {
- map[style].forEach(function (alias) {
- result[String(alias)] = style;
- });
- });
- }
-
- return result;
-}
-
-function Type$1(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.');
- }
- });
-
- // 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);
-
- if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {
- throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.');
- }
-}
-
-var type = Type$1;
-
-/*eslint-disable max-len*/
-
-
-
-
-
-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) {
-
- newIndex = previousIndex;
- }
- });
-
- result[newIndex] = currentType;
- });
-
- return result;
-}
-
-
-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 {
- result[type.kind][type.tag] = result['fallback'][type.tag] = type;
- }
- }
-
- for (index = 0, length = arguments.length; index < length; index += 1) {
- arguments[index].forEach(collectType);
- }
- return result;
-}
-
-
-function Schema$1(definition) {
- return this.extend(definition);
-}
-
-
-Schema$1.prototype.extend = function extend(definition) {
- var implicit = [];
- var explicit = [];
-
- if (definition instanceof type) {
- // Schema.extend(type)
- explicit.push(definition);
-
- } else if (Array.isArray(definition)) {
- // Schema.extend([ type1, type2, ... ])
- explicit = explicit.concat(definition);
-
- } 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);
-
- } else {
- throw new exception('Schema.extend argument should be a Type, [ Type ], ' +
- 'or a schema definition ({ implicit: [...], explicit: [...] })');
- }
-
- 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.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.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) {
- 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$1.prototype);
-
- result.implicit = (this.implicit || []).concat(implicit);
- result.explicit = (this.explicit || []).concat(explicit);
-
- result.compiledImplicit = compileList(result, 'implicit');
- result.compiledExplicit = compileList(result, 'explicit');
- result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);
-
- return result;
-};
-
-
-var schema = Schema$1;
-
-var str = new type('tag:yaml.org,2002:str', {
- kind: 'scalar',
- construct: function (data) { return data !== null ? data : ''; }
-});
-
-var seq = new type('tag:yaml.org,2002:seq', {
- kind: 'sequence',
- construct: function (data) { return data !== null ? data : []; }
-});
-
-var map = new type('tag:yaml.org,2002:map', {
- kind: 'mapping',
- construct: function (data) { return data !== null ? data : {}; }
-});
-
-var failsafe = new schema({
- explicit: [
- str,
- seq,
- map
- ]
-});
-
-function resolveYamlNull(data) {
- if (data === null) return true;
-
- var max = data.length;
-
- return (max === 1 && data === '~') ||
- (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));
-}
-
-function constructYamlNull() {
- return null;
-}
-
-function isNull(object) {
- return object === null;
-}
-
-var _null = new type('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'
-});
-
-function resolveYamlBoolean(data) {
- if (data === null) return false;
-
- var max = data.length;
-
- return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||
- (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));
-}
-
-function constructYamlBoolean(data) {
- return data === 'true' ||
- data === 'True' ||
- data === 'TRUE';
-}
-
-function isBoolean(object) {
- return Object.prototype.toString.call(object) === '[object Boolean]';
-}
-
-var bool = new type('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'
-});
-
-function isHexCode(c) {
- return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||
- ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||
- ((0x61/* a */ <= c) && (c <= 0x66/* f */));
-}
-
-function isOctCode(c) {
- return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));
-}
-
-function isDecCode(c) {
- return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));
-}
-
-function resolveYamlInteger(data) {
- if (data === null) return false;
-
- var max = data.length,
- index = 0,
- hasDigits = false,
- ch;
-
- if (!max) return false;
-
- ch = data[index];
-
- // sign
- if (ch === '-' || ch === '+') {
- ch = data[++index];
- }
-
- if (ch === '0') {
- // 0
- if (index + 1 === max) return true;
- ch = data[++index];
-
- // base 2, base 8, base 16
-
- 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 (ch === 'x') {
- // base 16
- index++;
-
- for (; index < max; index++) {
- ch = data[index];
- if (ch === '_') continue;
- if (!isHexCode(data.charCodeAt(index))) return false;
- hasDigits = true;
- }
- return hasDigits && ch !== '_';
- }
-
-
- if (ch === 'o') {
- // base 8
- index++;
-
- for (; index < max; index++) {
- ch = data[index];
- if (ch === '_') continue;
- if (!isOctCode(data.charCodeAt(index))) return false;
- hasDigits = true;
- }
- return hasDigits && ch !== '_';
- }
- }
-
- // base 10 (except 0)
-
- // value should not start with `_`;
- if (ch === '_') return false;
-
- for (; index < max; index++) {
- ch = data[index];
- if (ch === '_') continue;
- if (!isDecCode(data.charCodeAt(index))) {
- return false;
- }
- hasDigits = true;
- }
-
- // Should have digits and should not end with `_`
- if (!hasDigits || ch === '_') return false;
-
- return true;
-}
-
-function constructYamlInteger(data) {
- var value = data, sign = 1, ch;
-
- if (value.indexOf('_') !== -1) {
- value = value.replace(/_/g, '');
- }
-
- ch = value[0];
-
- if (ch === '-' || ch === '+') {
- if (ch === '-') sign = -1;
- value = value.slice(1);
- ch = value[0];
- }
-
- 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);
- }
-
- return sign * parseInt(value, 10);
-}
-
-function isInteger(object) {
- return (Object.prototype.toString.call(object)) === '[object Number]' &&
- (object % 1 === 0 && !common.isNegativeZero(object));
-}
-
-var int = new type('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' ]
- }
-});
-
-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 resolveYamlFloat(data) {
- if (data === null) return false;
-
- 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;
-}
-
-function constructYamlFloat(data) {
- var value, sign;
-
- value = data.replace(/_/g, '').toLowerCase();
- sign = value[0] === '-' ? -1 : 1;
-
- if ('+-'.indexOf(value[0]) >= 0) {
- value = value.slice(1);
- }
-
- if (value === '.inf') {
- return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
-
- } else if (value === '.nan') {
- return NaN;
- }
- return sign * parseFloat(value, 10);
-}
-
-
-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 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.isNegativeZero(object)) {
- return '-0.0';
- }
-
- res = object.toString(10);
-
- // 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;
-}
-
-function isFloat(object) {
- return (Object.prototype.toString.call(object) === '[object Number]') &&
- (object % 1 !== 0 || common.isNegativeZero(object));
-}
-
-var float = new type('tag:yaml.org,2002:float', {
- kind: 'scalar',
- resolve: resolveYamlFloat,
- construct: constructYamlFloat,
- predicate: isFloat,
- represent: representYamlFloat,
- defaultStyle: 'lowercase'
-});
-
-var json = failsafe.extend({
- implicit: [
- _null,
- bool,
- int,
- float
- ]
-});
-
-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;
-}
-
-function constructYamlTimestamp(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);
-
- if (match === null) throw new Error('Date resolve error');
-
- // match: [1] year [2] month [3] day
-
- 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));
- }
-
- // match: [4] hour [5] minute [6] second [7] fraction
-
- hour = +(match[4]);
- minute = +(match[5]);
- second = +(match[6]);
-
- if (match[7]) {
- fraction = match[7].slice(0, 3);
- while (fraction.length < 3) { // milli-seconds
- fraction += '0';
- }
- fraction = +fraction;
- }
-
- // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute
-
- 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;
- }
-
- date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
-
- if (delta) date.setTime(date.getTime() - delta);
-
- return date;
-}
-
-function representYamlTimestamp(object /*, style*/) {
- return object.toISOString();
-}
-
-var timestamp = new type('tag:yaml.org,2002:timestamp', {
- kind: 'scalar',
- resolve: resolveYamlTimestamp,
- construct: constructYamlTimestamp,
- instanceOf: Date,
- represent: representYamlTimestamp
-});
-
-function resolveYamlMerge(data) {
- return data === '<<' || data === null;
-}
-
-var merge = new type('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;
- }
-
- // If there are any bits left, source was corrupted
- return (bitlen % 8) === 0;
-}
-
-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 = [];
-
- // 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);
- }
-
- return new Uint8Array(result);
-}
-
-function representYamlBinary(object /*, style*/) {
- var result = '', bits = 0, idx, tail,
- max = object.length,
- map = BASE64_MAP;
-
- // 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];
- }
-
- bits = (bits << 8) + object[idx];
- }
-
- // Dump tail
-
- tail = max % 3;
-
- 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];
- }
-
- return result;
-}
-
-function isBinary(obj) {
- return Object.prototype.toString.call(obj) === '[object Uint8Array]';
-}
-
-var binary = new type('tag:yaml.org,2002:binary', {
- kind: 'scalar',
- resolve: resolveYamlBinary,
- construct: constructYamlBinary,
- predicate: isBinary,
- represent: representYamlBinary
-});
-
-var _hasOwnProperty$3 = Object.prototype.hasOwnProperty;
-var _toString$2 = Object.prototype.toString;
-
-function resolveYamlOmap(data) {
- if (data === null) return true;
-
- var objectKeys = [], index, length, pair, pairKey, pairHasKey,
- object = data;
-
- for (index = 0, length = object.length; index < length; index += 1) {
- pair = object[index];
- pairHasKey = false;
-
- if (_toString$2.call(pair) !== '[object Object]') return false;
-
- for (pairKey in pair) {
- if (_hasOwnProperty$3.call(pair, pairKey)) {
- if (!pairHasKey) pairHasKey = true;
- else return false;
- }
- }
-
- if (!pairHasKey) return false;
-
- if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);
- else return false;
- }
-
- return true;
-}
-
-function constructYamlOmap(data) {
- return data !== null ? data : [];
-}
-
-var omap = new type('tag:yaml.org,2002:omap', {
- kind: 'sequence',
- resolve: resolveYamlOmap,
- construct: constructYamlOmap
-});
-
-var _toString$1 = Object.prototype.toString;
-
-function resolveYamlPairs(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];
-
- if (_toString$1.call(pair) !== '[object Object]') return false;
-
- keys = Object.keys(pair);
-
- if (keys.length !== 1) return false;
-
- result[index] = [ keys[0], pair[keys[0]] ];
- }
-
- return true;
-}
-
-function constructYamlPairs(data) {
- if (data === null) return [];
-
- 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];
-
- keys = Object.keys(pair);
-
- result[index] = [ keys[0], pair[keys[0]] ];
- }
-
- return result;
-}
-
-var pairs = new type('tag:yaml.org,2002:pairs', {
- kind: 'sequence',
- resolve: resolveYamlPairs,
- construct: constructYamlPairs
-});
-
-var _hasOwnProperty$2 = Object.prototype.hasOwnProperty;
-
-function resolveYamlSet(data) {
- if (data === null) return true;
-
- var key, object = data;
-
- for (key in object) {
- if (_hasOwnProperty$2.call(object, key)) {
- if (object[key] !== null) return false;
- }
- }
-
- return true;
-}
-
-function constructYamlSet(data) {
- return data !== null ? data : {};
-}
-
-var set = new type('tag:yaml.org,2002:set', {
- kind: 'mapping',
- resolve: resolveYamlSet,
- construct: constructYamlSet
-});
-
-var _default = core.extend({
- implicit: [
- timestamp,
- merge
- ],
- explicit: [
- binary,
- omap,
- pairs,
- set
- ]
-});
-
-/*eslint-disable max-len,no-use-before-define*/
-
-
-
-
-
-
-
-var _hasOwnProperty$1 = 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 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(obj) { return Object.prototype.toString.call(obj); }
-
-function is_EOL(c) {
- return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);
-}
-
-function is_WHITE_SPACE(c) {
- return (c === 0x09/* Tab */) || (c === 0x20/* Space */);
-}
-
-function is_WS_OR_EOL(c) {
- return (c === 0x09/* Tab */) ||
- (c === 0x20/* Space */) ||
- (c === 0x0A/* LF */) ||
- (c === 0x0D/* CR */);
-}
-
-function is_FLOW_INDICATOR(c) {
- return c === 0x2C/* , */ ||
- c === 0x5B/* [ */ ||
- c === 0x5D/* ] */ ||
- c === 0x7B/* { */ ||
- c === 0x7D/* } */;
-}
-
-function fromHexCode(c) {
- var lc;
-
- if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {
- return c - 0x30;
- }
-
- /*eslint-disable no-bitwise*/
- lc = c | 0x20;
-
- if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {
- return lc - 0x61 + 10;
- }
-
- return -1;
-}
-
-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(c) {
- if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {
- return c - 0x30;
- }
-
- return -1;
-}
-
-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' : '';
-}
-
-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
- );
-}
-
-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$1(input, options) {
- this.input = input;
-
- this.filename = options['filename'] || null;
- 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
- this.legacy = options['legacy'] || false;
-
- this.json = options['json'] || false;
- this.listener = options['listener'] || null;
-
- this.implicitTypes = this.schema.compiledImplicit;
- this.typeMap = this.schema.compiledTypeMap;
-
- this.length = input.length;
- this.position = 0;
- this.line = 0;
- this.lineStart = 0;
- this.lineIndent = 0;
-
- // position of first leading tab in the current line,
- // used to make sure there are no tabs in the indentation
- this.firstTabInLine = -1;
-
- this.documents = [];
-
- /*
- this.version;
- this.checkLineBreaks;
- this.tagMap;
- this.anchorMap;
- this.tag;
- this.anchor;
- this.kind;
- this.result;*/
-
-}
-
-
-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
- };
-
- mark.snippet = snippet(mark);
-
- return new exception(message, mark);
-}
-
-function throwError(state, message) {
- throw generateError(state, message);
-}
-
-function throwWarning(state, message) {
- if (state.onWarning) {
- state.onWarning.call(null, generateError(state, message));
- }
-}
-
-
-var directiveHandlers = {
-
- YAML: function handleYamlDirective(state, name, args) {
-
- var match, major, minor;
-
- if (state.version !== null) {
- throwError(state, 'duplication of %YAML directive');
- }
-
- if (args.length !== 1) {
- throwError(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');
- }
-
- major = parseInt(match[1], 10);
- minor = parseInt(match[2], 10);
-
- if (major !== 1) {
- throwError(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');
- }
- },
-
- TAG: function handleTagDirective(state, name, args) {
-
- var handle, prefix;
-
- if (args.length !== 2) {
- throwError(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 (_hasOwnProperty$1.call(state.tagMap, handle)) {
- throwError(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');
- }
-
- try {
- prefix = decodeURIComponent(prefix);
- } catch (err) {
- throwError(state, 'tag prefix is malformed: ' + prefix);
- }
-
- state.tagMap[handle] = prefix;
- }
-};
-
-
-function captureSegment(state, start, end, checkJson) {
- var _position, _length, _character, _result;
-
- if (start < end) {
- _result = state.input.slice(start, end);
-
- if (checkJson) {
- for (_position = 0, _length = _result.length; _position < _length; _position += 1) {
- _character = _result.charCodeAt(_position);
- if (!(_character === 0x09 ||
- (0x20 <= _character && _character <= 0x10FFFF))) {
- throwError(state, 'expected valid JSON character');
- }
- }
- } else if (PATTERN_NON_PRINTABLE.test(_result)) {
- throwError(state, 'the stream contains non-printable characters');
- }
-
- state.result += _result;
- }
-}
-
-function mergeMappings(state, destination, source, overridableKeys) {
- var sourceKeys, key, index, quantity;
-
- if (!common.isObject(source)) {
- throwError(state, 'cannot merge mappings; the provided source object is unacceptable');
- }
-
- sourceKeys = Object.keys(source);
-
- for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
- key = sourceKeys[index];
-
- if (!_hasOwnProperty$1.call(destination, key)) {
- destination[key] = source[key];
- overridableKeys[key] = true;
- }
- }
-}
-
-function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,
- startLine, startLineStart, startPos) {
-
- var index, quantity;
-
- // 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);
-
- for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {
- if (Array.isArray(keyNode[index])) {
- throwError(state, 'nested arrays are not supported inside keys');
- }
-
- if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {
- keyNode[index] = '[object Object]';
- }
- }
- }
-
- // 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]';
- }
-
-
- keyNode = String(keyNode);
-
- 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(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(state, 'duplicated mapping key');
- }
-
- // 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];
- }
-
- return _result;
-}
-
-function readLineBreak(state) {
- var ch;
-
- ch = state.input.charCodeAt(state.position);
-
- 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(state, 'a line break is expected');
- }
-
- state.line += 1;
- state.lineStart = state.position;
- state.firstTabInLine = -1;
-}
-
-function skipSeparationSpace(state, allowComments, checkIndent) {
- var lineBreaks = 0,
- ch = state.input.charCodeAt(state.position);
-
- while (ch !== 0) {
- while (is_WHITE_SPACE(ch)) {
- if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {
- state.firstTabInLine = state.position;
- }
- ch = state.input.charCodeAt(++state.position);
- }
-
- if (allowComments && ch === 0x23/* # */) {
- do {
- ch = state.input.charCodeAt(++state.position);
- } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);
- }
-
- if (is_EOL(ch)) {
- readLineBreak(state);
-
- ch = state.input.charCodeAt(state.position);
- lineBreaks++;
- state.lineIndent = 0;
-
- while (ch === 0x20/* Space */) {
- state.lineIndent++;
- ch = state.input.charCodeAt(++state.position);
- }
- } else {
- break;
- }
- }
-
- if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {
- throwWarning(state, 'deficient indentation');
- }
-
- return lineBreaks;
-}
-
-function testDocumentSeparator(state) {
- var _position = state.position,
- ch;
-
- ch = state.input.charCodeAt(_position);
-
- // 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)) {
-
- _position += 3;
-
- ch = state.input.charCodeAt(_position);
-
- if (ch === 0 || is_WS_OR_EOL(ch)) {
- return true;
- }
- }
-
- return false;
-}
-
-function writeFoldedLines(state, count) {
- if (count === 1) {
- state.result += ' ';
- } else if (count > 1) {
- state.result += common.repeat('\n', count - 1);
- }
-}
-
-
-function readPlainScalar(state, nodeIndent, withinFlowCollection) {
- var preceding,
- following,
- captureStart,
- captureEnd,
- hasPendingContent,
- _line,
- _lineStart,
- _lineIndent,
- _kind = state.kind,
- _result = state.result,
- ch;
-
- ch = state.input.charCodeAt(state.position);
-
- 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;
- }
-
- if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {
- following = state.input.charCodeAt(state.position + 1);
-
- if (is_WS_OR_EOL(following) ||
- withinFlowCollection && is_FLOW_INDICATOR(following)) {
- return false;
- }
- }
-
- 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 (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(preceding)) {
- break;
- }
-
- } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||
- withinFlowCollection && is_FLOW_INDICATOR(ch)) {
- break;
-
- } else if (is_EOL(ch)) {
- _line = state.line;
- _lineStart = state.lineStart;
- _lineIndent = state.lineIndent;
- skipSeparationSpace(state, false, -1);
-
- 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;
- }
- }
-
- if (hasPendingContent) {
- captureSegment(state, captureStart, captureEnd, false);
- writeFoldedLines(state, state.line - _line);
- captureStart = captureEnd = state.position;
- hasPendingContent = false;
- }
-
- if (!is_WHITE_SPACE(ch)) {
- captureEnd = state.position + 1;
- }
-
- ch = state.input.charCodeAt(++state.position);
- }
-
- captureSegment(state, captureStart, captureEnd, false);
-
- if (state.result) {
- return true;
- }
-
- state.kind = _kind;
- state.result = _result;
- return false;
-}
-
-function readSingleQuotedScalar(state, nodeIndent) {
- var ch,
- captureStart, captureEnd;
-
- ch = state.input.charCodeAt(state.position);
-
- if (ch !== 0x27/* ' */) {
- return false;
- }
-
- state.kind = 'scalar';
- state.result = '';
- state.position++;
- captureStart = captureEnd = state.position;
-
- 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;
- }
-
- } 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(state)) {
- throwError(state, 'unexpected end of the document within a single quoted scalar');
-
- } else {
- state.position++;
- captureEnd = state.position;
- }
- }
-
- throwError(state, 'unexpected end of the stream within a single quoted scalar');
-}
-
-function readDoubleQuotedScalar(state, nodeIndent) {
- var captureStart,
- captureEnd,
- hexLength,
- hexResult,
- tmp,
- ch;
-
- ch = state.input.charCodeAt(state.position);
-
- if (ch !== 0x22/* " */) {
- return false;
- }
-
- state.kind = 'scalar';
- state.result = '';
- state.position++;
- captureStart = captureEnd = state.position;
-
- while ((ch = state.input.charCodeAt(state.position)) !== 0) {
- if (ch === 0x22/* " */) {
- captureSegment(state, captureStart, state.position, true);
- state.position++;
- return true;
-
- } else if (ch === 0x5C/* \ */) {
- captureSegment(state, captureStart, state.position, true);
- ch = state.input.charCodeAt(++state.position);
-
- if (is_EOL(ch)) {
- skipSeparationSpace(state, false, nodeIndent);
-
- // TODO: rework to inline fn with no type cast?
- } else if (ch < 256 && simpleEscapeCheck[ch]) {
- state.result += simpleEscapeMap[ch];
- state.position++;
-
- } else if ((tmp = escapedHexLen(ch)) > 0) {
- hexLength = tmp;
- hexResult = 0;
-
- for (; hexLength > 0; hexLength--) {
- ch = state.input.charCodeAt(++state.position);
-
- if ((tmp = fromHexCode(ch)) >= 0) {
- hexResult = (hexResult << 4) + tmp;
-
- } else {
- throwError(state, 'expected hexadecimal character');
- }
- }
-
- state.result += charFromCodepoint(hexResult);
-
- state.position++;
-
- } else {
- throwError(state, 'unknown escape sequence');
- }
-
- captureStart = captureEnd = state.position;
-
- } 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(state)) {
- throwError(state, 'unexpected end of the document within a double quoted scalar');
-
- } else {
- state.position++;
- captureEnd = state.position;
- }
- }
-
- throwError(state, 'unexpected end of the stream within a double quoted scalar');
-}
-
-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;
-
- ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x5B/* [ */) {
- terminator = 0x5D;/* ] */
- isMapping = false;
- _result = [];
- } else if (ch === 0x7B/* { */) {
- terminator = 0x7D;/* } */
- isMapping = true;
- _result = {};
- } else {
- return false;
- }
-
- if (state.anchor !== null) {
- state.anchorMap[state.anchor] = _result;
- }
-
- ch = state.input.charCodeAt(++state.position);
-
- while (ch !== 0) {
- skipSeparationSpace(state, true, nodeIndent);
-
- ch = state.input.charCodeAt(state.position);
-
- 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(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(state, "expected the node content, but found ','");
- }
-
- keyTag = keyNode = valueNode = null;
- isPair = isExplicitPair = false;
-
- 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);
- }
- }
-
- _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;
- }
-
- 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);
- }
-
- skipSeparationSpace(state, true, nodeIndent);
-
- ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x2C/* , */) {
- readNext = true;
- ch = state.input.charCodeAt(++state.position);
- } else {
- readNext = false;
- }
- }
-
- throwError(state, 'unexpected end of the stream within a flow collection');
-}
-
-function readBlockScalar(state, nodeIndent) {
- var captureStart,
- folding,
- chomping = CHOMPING_CLIP,
- didReadContent = false,
- detectedIndent = false,
- textIndent = nodeIndent,
- emptyLines = 0,
- atMoreIndented = false,
- tmp,
- ch;
-
- ch = state.input.charCodeAt(state.position);
-
- if (ch === 0x7C/* | */) {
- folding = false;
- } else if (ch === 0x3E/* > */) {
- folding = true;
- } else {
- return false;
- }
-
- state.kind = 'scalar';
- state.result = '';
-
- while (ch !== 0) {
- ch = state.input.charCodeAt(++state.position);
-
- if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {
- if (CHOMPING_CLIP === chomping) {
- chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;
- } else {
- throwError(state, 'repeat of a chomping mode identifier');
- }
-
- } else if ((tmp = fromDecimalCode(ch)) >= 0) {
- if (tmp === 0) {
- 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(state, 'repeat of an indentation width identifier');
- }
-
- } else {
- break;
- }
- }
-
- 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));
- }
- }
-
- while (ch !== 0) {
- readLineBreak(state);
- state.lineIndent = 0;
-
- ch = state.input.charCodeAt(state.position);
-
- while ((!detectedIndent || state.lineIndent < textIndent) &&
- (ch === 0x20/* Space */)) {
- state.lineIndent++;
- ch = state.input.charCodeAt(++state.position);
- }
-
- if (!detectedIndent && state.lineIndent > textIndent) {
- textIndent = state.lineIndent;
- }
-
- if (is_EOL(ch)) {
- emptyLines++;
- continue;
- }
-
- // End of the scalar.
- 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 (didReadContent) { // i.e. only if the scalar is not empty.
- state.result += '\n';
- }
- }
-
- // Break this `while` cycle and go to the funciton's epilogue.
- break;
- }
-
- // Folded style: use fancy rules to handle line breaks.
- if (folding) {
-
- // 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.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
-
- // End of more-indented block.
- } else if (atMoreIndented) {
- atMoreIndented = false;
- state.result += common.repeat('\n', emptyLines + 1);
-
- // 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 += ' ';
- }
-
- // Several line breaks - perceive as different lines.
- } else {
- 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.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
- }
-
- didReadContent = true;
- detectedIndent = true;
- emptyLines = 0;
- captureStart = state.position;
-
- while (!is_EOL(ch) && (ch !== 0)) {
- ch = state.input.charCodeAt(++state.position);
- }
-
- captureSegment(state, captureStart, state.position, false);
- }
-
- return true;
-}
-
-function readBlockSequence(state, nodeIndent) {
- var _line,
- _tag = state.tag,
- _anchor = state.anchor,
- _result = [],
- following,
- 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 (state.firstTabInLine !== -1) {
- state.position = state.firstTabInLine;
- throwError(state, 'tab characters must not be used in indentation');
- }
-
- if (ch !== 0x2D/* - */) {
- break;
- }
-
- 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<parent
- atNewLine = false,
- hasContent = false,
- typeIndex,
- typeQuantity,
- typeList,
- type,
- flowIndent,
- blockIndent;
-
- if (state.listener !== null) {
- state.listener('open', state);
- }
-
- state.tag = null;
- state.anchor = null;
- state.kind = null;
- state.result = null;
-
- allowBlockStyles = allowBlockScalars = allowBlockCollections =
- CONTEXT_BLOCK_OUT === nodeContext ||
- CONTEXT_BLOCK_IN === nodeContext;
-
- if (allowToSeek) {
- if (skipSeparationSpace(state, true, -1)) {
- atNewLine = true;
-
- if (state.lineIndent > 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;
+/**
+ * @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}
+ */
- } else if (readAlias(state)) {
- hasContent = true;
+const primitives$6 = new Set(['string', 'number', 'boolean']);
- if (state.tag !== null || state.anchor !== null) {
- throwError(state, 'alias node should not have any properties');
- }
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$6(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];
- } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
- hasContent = true;
+ Object.defineProperty(plugin, 'name', {value: id});
- if (state.tag === null) {
- state.tag = '?';
- }
- }
+ return plugin
- 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);
- }
- }
+ /** @type {import('unified').Plugin<[unknown]|void[]>} */
+ function plugin(raw) {
+ const [severity, options] = coerce$6(ruleId, raw);
- if (state.tag === null) {
- if (state.anchor !== null) {
- state.anchorMap[state.anchor] = state.result;
- }
+ if (!severity) return
- } 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 + '"');
- }
+ const fatal = severity === 2;
- for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
- type = state.implicitTypes[typeIndex];
+ return (tree, file, next) => {
+ let index = file.messages.length - 1;
- 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'];
+ wrap(rule, (error) => {
+ const messages = file.messages;
- 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;
+ // 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 (!type) {
- throwError(state, 'unknown tag !<' + 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 + '"');
- }
-
- 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 (state.listener !== null) {
- state.listener('close', state);
- }
- return state.tag !== null || state.anchor !== null || hasContent;
-}
-
-function readDocument(state) {
- var documentStart = state.position,
- _position,
- directiveName,
- directiveArgs,
- hasDirectives = false,
- ch;
-
- state.version = null;
- state.checkLineBreaks = state.legacy;
- state.tagMap = Object.create(null);
- state.anchorMap = Object.create(null);
-
- while ((ch = state.input.charCodeAt(state.position)) !== 0) {
- skipSeparationSpace(state, true, -1);
-
- ch = state.input.charCodeAt(state.position);
-
- if (state.lineIndent > 0 || ch !== 0x25/* % */) {
- break;
- }
-
- hasDirectives = true;
- ch = state.input.charCodeAt(++state.position);
- _position = state.position;
-
- while (ch !== 0 && !is_WS_OR_EOL(ch)) {
- ch = state.input.charCodeAt(++state.position);
- }
-
- directiveName = state.input.slice(_position, state.position);
- directiveArgs = [];
-
- if (directiveName.length < 1) {
- throwError(state, 'directive name must not be less than one character in length');
- }
-
- while (ch !== 0) {
- while (is_WHITE_SPACE(ch)) {
- ch = state.input.charCodeAt(++state.position);
- }
-
- if (ch === 0x23/* # */) {
- do { ch = state.input.charCodeAt(++state.position); }
- while (ch !== 0 && !is_EOL(ch));
- break;
- }
-
- if (is_EOL(ch)) break;
-
- _position = state.position;
-
- while (ch !== 0 && !is_WS_OR_EOL(ch)) {
- ch = state.input.charCodeAt(++state.position);
- }
-
- directiveArgs.push(state.input.slice(_position, state.position));
- }
-
- if (ch !== 0) readLineBreak(state);
-
- if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {
- directiveHandlers[directiveName](state, directiveName, directiveArgs);
- } else {
- throwWarning(state, 'unknown document directive "' + directiveName + '"');
- }
- }
-
- skipSeparationSpace(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);
-
- } else if (hasDirectives) {
- throwError(state, 'directives end mark is expected');
- }
-
- composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
- skipSeparationSpace(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');
- }
-
- state.documents.push(state.result);
-
- if (state.position === state.lineStart && testDocumentSeparator(state)) {
-
- if (state.input.charCodeAt(state.position) === 0x2E/* . */) {
- state.position += 3;
- skipSeparationSpace(state, true, -1);
- }
- return;
- }
-
- if (state.position < (state.length - 1)) {
- throwError(state, 'end of the stream or a document separator is expected');
- } else {
- return;
- }
-}
-
-
-function loadDocuments(input, options) {
- input = String(input);
- options = options || {};
-
- 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';
- }
-
- // Strip BOM
- if (input.charCodeAt(0) === 0xFEFF) {
- input = input.slice(1);
- }
- }
-
- var state = new State$1(input, options);
-
- var nullpos = input.indexOf('\0');
-
- if (nullpos !== -1) {
- state.position = nullpos;
- throwError(state, 'null byte is not allowed in input');
- }
-
- // 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;
- }
-
- while (state.position < (state.length - 1)) {
- readDocument(state);
- }
-
- return state.documents;
-}
-
-
-function loadAll$1(input, iterator, options) {
- if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {
- options = iterator;
- iterator = null;
- }
-
- var documents = loadDocuments(input, options);
-
- if (typeof iterator !== 'function') {
- return documents;
- }
-
- for (var index = 0, length = documents.length; index < length; index += 1) {
- iterator(documents[index]);
- }
-}
-
-
-function load$1(input, options) {
- var documents = loadDocuments(input, options);
-
- 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');
-}
-
-
-var loadAll_1 = loadAll$1;
-var load_1 = load$1;
-
-var loader = {
- loadAll: loadAll_1,
- load: load_1
-};
-
-/*eslint-disable no-use-before-define*/
-
-
-
-
-
-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 (type && _hasOwnProperty.call(type.styleAliases, style)) {
- style = type.styleAliases[style];
- }
-
- result[tag] = style;
- }
-
- return result;
-}
-
-function encodeHex(character) {
- var string, handle, length;
-
- 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');
- }
-
- return '\\' + handle + common.repeat('0', length - string.length) + string;
-}
-
-
-var QUOTING_TYPE_SINGLE = 1,
- QUOTING_TYPE_DOUBLE = 2;
-
-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;
-
- 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;
- }
-
- return result;
-}
-
-function generateNextLine(state, level) {
- return '\n' + common.repeat(' ', state.indent * level);
-}
-
-function testImplicitResolving(state, str) {
- var index, length, type;
-
- for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {
- type = state.implicitTypes[index];
-
- if (type.resolve(str)) {
- return true;
- }
- }
- return false;
-}
-
-// [33] s-white ::= s-space | s-tab
-function isWhitespace(c) {
- return c === CHAR_SPACE || c === CHAR_TAB;
-}
-
-// 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);
-}
-
-// [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;
-}
-
-// [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 ':[^ ]'
-}
-
-// 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;
-}
-
-// 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;
-}
-
-// 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;
-}
-
-// Determines whether block indentation indicator is required.
-function needIndentIndicator(string) {
- var leadingSpaceRe = /^\n* /;
- return leadingSpaceRe.test(string);
-}
-
-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) {
-
- 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;
- }
- } 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;
+ while (++index < messages.length) {
+ Object.assign(messages[index], {ruleId, source, fatal});
}
- } 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] !== ' '));
- }
- // 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;
-}
-// 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 + "'");
- }
- }
-
- 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);
-
- // 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);
- }
-
- switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,
- testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {
-
- 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');
+ next();
+ })(tree, file, options);
}
- }());
-}
-
-// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.
-function blockHeader(string, indentPerLevel) {
- var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';
-
- // 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 ? '' : '-');
-
- return indentIndicator + chomp + '\n';
-}
-
-// (See the note for writeScalar.)
-function dropEndingNewline(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) {
- // 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(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;
-
- // 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;
}
-
- 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(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 = '';
-
- // 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;
- }
+/**
+ * Coerce a value to a severity--options tuple.
+ *
+ * @param {string} name
+ * @param {unknown} value
+ * @returns {SeverityTuple}
+ */
+function coerce$6(name, value) {
+ /** @type {unknown[]} */
+ let result;
- // 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);
+ 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$6.has(typeof value[0])
+ ) {
+ // `isArray(unknown)` is turned into `any[]`:
+ // type-coverage:ignore-next-line
+ result = [...value];
} else {
- result += line.slice(start);
- }
-
- return result.slice(1); // drop extra \n joiner
-}
-
-// Escapes a double-quoted string.
-function escapeString(string) {
- var result = '';
- var char = 0;
- var escapeSeq;
-
- for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {
- char = codePointAt(string, i);
- escapeSeq = ESCAPE_SEQUENCES[char];
-
- if (!escapeSeq && isPrintable(char)) {
- result += string[i];
- if (char >= 0x10000) result += string[i + 1];
- } else {
- result += escapeSeq || encodeHex(char);
- }
- }
-
- return result;
-}
-
-function writeFlowSequence(state, level, object) {
- var _result = '',
- _tag = state.tag,
- index,
- length,
- value;
-
- for (index = 0, length = object.length; index < length; index += 1) {
- value = object[index];
-
- if (state.replacer) {
- value = state.replacer.call(object, String(index), value);
- }
-
- // 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;
- }
- }
-
- state.tag = _tag;
- state.dump = '[' + _result + ']';
-}
-
-function writeBlockSequence(state, level, object, compact) {
- var _result = '',
- _tag = state.tag,
- index,
- length,
- value;
-
- for (index = 0, length = object.length; index < length; index += 1) {
- value = object[index];
-
- if (state.replacer) {
- value = state.replacer.call(object, String(index), value);
- }
-
- // 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))) {
-
- if (!compact || _result !== '') {
- _result += generateNextLine(state, level);
- }
-
- if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
- _result += '-';
- } else {
- _result += '- ';
- }
-
- _result += state.dump;
- }
- }
-
- 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;
-
- 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(state, level, objectKey, false, false)) {
- continue; // Skip this pair because of invalid key;
- }
-
- if (state.dump.length > 1024) pairBuffer += '? ';
-
- pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' ');
-
- if (!writeNode(state, level, objectValue, false, false)) {
- continue; // Skip this pair because of invalid value.
- }
-
- pairBuffer += state.dump;
-
- // Both key and value are valid.
- _result += pairBuffer;
- }
-
- 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;
-
- // 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');
+ result = [1, value];
}
- for (index = 0, length = objectKeyList.length; index < length; index += 1) {
- pairBuffer = '';
-
- if (!compact || _result !== '') {
- pairBuffer += generateNextLine(state, level);
- }
-
- objectKey = objectKeyList[index];
- objectValue = object[objectKey];
-
- if (state.replacer) {
- objectValue = state.replacer.call(object, objectKey, objectValue);
- }
-
- if (!writeNode(state, level + 1, objectKey, true, true, true)) {
- continue; // Skip this pair because of invalid key.
- }
-
- 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 += '? ';
- }
- }
-
- pairBuffer += state.dump;
-
- if (explicitPair) {
- pairBuffer += generateNextLine(state, level);
- }
-
- if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {
- continue; // Skip this pair because of invalid value.
- }
+ let level = result[0];
- if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
- pairBuffer += ':';
+ 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 {
- pairBuffer += ': ';
- }
-
- pairBuffer += state.dump;
-
- // Both key and value are valid.
- _result += pairBuffer;
- }
-
- state.tag = _tag;
- state.dump = _result || '{}'; // Empty mapping if no valid pairs.
-}
-
-function detectType(state, object, explicit) {
- var _result, typeList, index, length, type, style;
-
- typeList = explicit ? state.explicitTypes : state.implicitTypes;
-
- for (index = 0, length = typeList.length; index < length; index += 1) {
- type = typeList[index];
-
- if ((type.instanceOf || type.predicate) &&
- (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&
- (!type.predicate || type.predicate(object))) {
-
- if (explicit) {
- if (type.multi && type.representName) {
- state.tag = type.representName(object);
- } else {
- state.tag = type.tag;
- }
- } else {
- state.tag = '?';
- }
-
- if (type.represent) {
- style = state.styleMap[type.tag] || type.defaultStyle;
-
- 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');
- }
-
- state.dump = _result;
- }
-
- return true;
+ level = 1;
+ result = [level, result];
}
}
- return false;
-}
-
-// 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);
- }
-
- var type = _toString.call(state.dump);
- var inblock = block;
- var tagStr;
-
- if (block) {
- block = (state.flowLevel < 0 || state.flowLevel > level);
- }
-
- var objectOrArray = type === '[object Object]' || type === '[object Array]',
- duplicateIndex,
- duplicate;
-
- if (objectOrArray) {
- duplicateIndex = state.duplicates.indexOf(object);
- duplicate = duplicateIndex !== -1;
- }
-
- if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {
- compact = false;
- }
-
- 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);
- }
-
- 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 + '>';
- }
-
- state.dump = tagStr + ' ' + state.dump;
- }
+ if (typeof level !== 'number' || level < 0 || level > 2) {
+ throw new Error(
+ 'Incorrect severity `' +
+ level +
+ '` for `' +
+ name +
+ '`, ' +
+ 'expected 0, 1, or 2'
+ )
}
- return true;
-}
-
-function getDuplicateReferences(object, state) {
- var objects = [],
- duplicatesIndexes = [],
- index,
- length;
-
- inspectNode(object, objects, duplicatesIndexes);
+ result[0] = level;
- for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {
- state.duplicates.push(objects[duplicatesIndexes[index]]);
- }
- state.usedDuplicates = new Array(length);
+ // @ts-expect-error: it’s now a valid tuple.
+ return result
}
-function inspectNode(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(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);
- }
- }
- }
+function* getLinksRecursively(node) {
+ if (node.url) {
+ yield node;
}
-}
-
-function dump$1(input, options) {
- options = options || {};
-
- var state = new State(options);
-
- if (!state.noRefs) getDuplicateReferences(input, state);
-
- var value = input;
-
- if (state.replacer) {
- value = state.replacer.call({ '': value }, '', value);
+ for (const child of node.children || []) {
+ yield* getLinksRecursively(child);
}
-
- if (writeNode(state, 0, value, true, true)) return state.dump + '\n';
-
- return '';
}
-var dump_1 = dump$1;
-
-var dumper = {
- dump: dump_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.');
- };
-}
-
-
-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
-};
-
-// 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,
- safeLoad: safeLoad,
- safeLoadAll: safeLoadAll,
- safeDump: safeDump
-};
-
-// 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';
-
-const MAX_LENGTH$2 = 256;
-const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER ||
- /* istanbul ignore next */ 9007199254740991;
-
-// Max safe segment length for coercion.
-const MAX_SAFE_COMPONENT_LENGTH = 16;
-
-var constants = {
- SEMVER_SPEC_VERSION,
- MAX_LENGTH: MAX_LENGTH$2,
- MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,
- MAX_SAFE_COMPONENT_LENGTH
-};
-
-var re$2 = {exports: {}};
-
-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)
- : () => {};
-
-var debug_1 = debug$1;
-
-(function (module, exports) {
-const { MAX_SAFE_COMPONENT_LENGTH } = constants;
-const debug = debug_1;
-exports = module.exports = {};
-
-// The actual regexps go on exports.re
-const re = exports.re = [];
-const src = exports.src = [];
-const t = exports.t = {};
-let R = 0;
-
-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);
-};
-
-// The following Regular Expressions can be used for tokenizing,
-// validating, and parsing SemVer version strings.
-
-// ## Numeric Identifier
-// A single `0`, or a non-zero digit followed by zero or more digits.
-
-createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*');
-createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+');
-
-// ## Non-numeric Identifier
-// Zero or more digits, followed by a letter or hyphen, and then zero or
-// more letters, digits, or hyphens.
-
-createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*');
-
-// ## Main Version
-// Three dot-separated numeric identifiers.
-
-createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
- `(${src[t.NUMERICIDENTIFIER]})\\.` +
- `(${src[t.NUMERICIDENTIFIER]})`);
-
-createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
- `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
- `(${src[t.NUMERICIDENTIFIERLOOSE]})`);
-
-// ## Pre-release Version Identifier
-// A numeric identifier, or a non-numeric identifier.
-
-createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
-}|${src[t.NONNUMERICIDENTIFIER]})`);
-
-createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
-}|${src[t.NONNUMERICIDENTIFIER]})`);
-
-// ## Pre-release Version
-// Hyphen, followed by one or more dot-separated pre-release version
-// identifiers.
-
-createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
-}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
-
-createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
-}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
-
-// ## Build Metadata Identifier
-// Any combination of digits, letters, or hyphens.
-
-createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+');
-
-// ## Build Metadata
-// Plus sign, followed by one or more period-separated build metadata
-// identifiers.
-
-createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
-}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
-
-// ## Full Version String
-// A main version, followed optionally by a pre-release version and
-// build metadata.
-
-// 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.
-
-createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
-}${src[t.PRERELEASE]}?${
- src[t.BUILD]}?`);
-
-createToken('FULL', `^${src[t.FULLPLAIN]}$`);
-
-// 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]}?`);
-
-createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`);
-
-createToken('GTLT', '((?:<|>)?=?)');
-
-// 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|\\*`);
-
-createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
- `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
- `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
- `(?:${src[t.PRERELEASE]})?${
- src[t.BUILD]}?` +
- `)?)?`);
-
-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$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;
- }
-
- return a === b ? 0
- : (anum && !bnum) ? -1
- : (bnum && !anum) ? 1
- : a < b ? -1
- : 1
-};
-
-const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a);
-
-var identifiers = {
- compareIdentifiers: compareIdentifiers$1,
- rcompareIdentifiers
-};
-
-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);
-
- 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 (version.length > MAX_LENGTH$1) {
- throw new TypeError(
- `version is longer than ${MAX_LENGTH$1} characters`
- )
- }
-
- 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 m = version.trim().match(options.loose ? re$1[t$1.LOOSE] : re$1[t$1.FULL]);
-
- if (!m) {
- throw new TypeError(`Invalid Version: ${version}`)
- }
-
- this.raw = version;
-
- // these are actually numbers
- this.major = +m[1];
- this.minor = +m[2];
- this.patch = +m[3];
-
- if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
- throw new TypeError('Invalid major version')
- }
-
- 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();
- }
-
- format () {
- this.version = `${this.major}.${this.minor}.${this.patch}`;
- if (this.prerelease.length) {
- this.version += `-${this.prerelease.join('.')}`;
- }
- return this.version
- }
-
- toString () {
- return this.version
- }
-
- 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);
- }
-
- if (other.version === this.version) {
- return 0
- }
-
- return this.compareMain(other) || this.comparePre(other)
- }
-
- compareMain (other) {
- if (!(other instanceof SemVer$2)) {
- other = new SemVer$2(other, this.options);
- }
-
- return (
- compareIdentifiers(this.major, other.major) ||
- compareIdentifiers(this.minor, other.minor) ||
- compareIdentifiers(this.patch, other.patch)
- )
- }
-
- comparePre (other) {
- if (!(other instanceof SemVer$2)) {
- other = new SemVer$2(other, this.options);
- }
-
- // 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)
+function validateLinks(tree, vfile) {
+ const currentFileURL = pathToFileURL(path$b.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:" && !require$$0$3.existsSync(targetURL)) {
+ vfile.message("Broken link", node);
+ } else if (targetURL.pathname === currentFileURL.pathname) {
+ const expected = node.url.includes("#")
+ ? node.url.slice(node.url.indexOf("#"))
+ : "#";
+ vfile.message(
+ `Self-reference must start with hash (expected "${expected}", got "${node.url}")`,
+ node
+ );
}
- } while (++i)
- }
-
- compareBuild (other) {
- if (!(other instanceof SemVer$2)) {
- other = new SemVer$2(other, this.options);
}
-
- 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)
+ if (node.type === "definition") {
+ if (previousDefinitionLabel && previousDefinitionLabel > node.label) {
+ vfile.message(
+ `Unordered reference ("${node.label}" should be before "${previousDefinitionLabel}")`,
+ node
+ );
}
- } 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
-
- 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}`)
+ previousDefinitionLabel = node.label;
}
- this.format();
- this.raw = this.version;
- return this
}
}
-var semver = SemVer$2;
-
-const {MAX_LENGTH} = constants;
-const { re, t } = re$2.exports;
-const SemVer$1 = semver;
-
-const parseOptions = parseOptions_1;
-const parse = (version, options) => {
- options = parseOptions(options);
-
- if (version instanceof SemVer$1) {
- return version
- }
-
- if (typeof version !== 'string') {
- return null
- }
-
- if (version.length > MAX_LENGTH) {
- return null
- }
-
- const r = options.loose ? re[t.LOOSE] : re[t.FULL];
- if (!r.test(version)) {
- return null
- }
-
- try {
- return new SemVer$1(version, options)
- } catch (er) {
- return null
- }
-};
-
-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 remarkLintNodejsLinks = lintRule$6(
+ "remark-lint:nodejs-links",
+ validateLinks
+);
const allowedKeys = [
"added",
@@ -60529,7 +56235,7 @@ function validateMeta(node, file, meta) {
}
function validateYAMLComments(tree, file) {
- visit$2(tree, "html", function visitor(node) {
+ visit(tree, "html", function visitor(node) {
if (node.value.startsWith("<!--YAML\n"))
file.message(
"Expected `<!-- YAML`, found `<!--YAML`. Please add a space",
@@ -60546,134 +56252,118 @@ function validateYAMLComments(tree, file) {
});
}
-const remarkLintNodejsYamlComments = lintRule(
+const remarkLintNodejsYamlComments = lintRule$6(
"remark-lint:nodejs-yaml-comments",
validateYAMLComments
);
-var escapeStringRegexp$2 = string => {
+function escapeStringRegexp(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.
+ // 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');
-};
-
-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;
-
- return point
-
- function point(node) {
- var point = (node && node.position && node.position[type]) || {};
-
- return {
- line: point.line || null,
- column: point.column || null,
- offset: isNaN(point.offset) ? null : point.offset
- }
- }
-}
-
-var wrapped = wrapped_1;
-
-var unifiedLintRule = factory$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}
+ */
-function factory$1(id, rule) {
- var parts = id.split(':');
- var source = parts[0];
- var ruleId = parts[1];
- var fn = wrapped(rule);
+const primitives$5 = new Set(['string', 'number', 'boolean']);
- /* istanbul ignore if - possibly useful if externalised later. */
- if (!ruleId) {
- ruleId = source;
- source = null;
- }
+/**
+ * @param {string} id
+ * @param {Rule} rule
+ */
+function lintRule$5(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];
- attacher.displayName = id;
+ Object.defineProperty(plugin, 'name', {value: id});
- return attacher
+ return plugin
- function attacher(raw) {
- var config = coerce(ruleId, raw);
- var severity = config[0];
- var options = config[1];
- var fatal = severity === 2;
+ /** @type {import('unified').Plugin<[unknown]|void[]>} */
+ function plugin(raw) {
+ const [severity, options] = coerce$5(ruleId, raw);
- return severity ? transformer : undefined
+ if (!severity) return
- function transformer(tree, file, next) {
- var index = file.messages.length;
+ const fatal = severity === 2;
- fn(tree, file, options, done);
+ return (tree, file, next) => {
+ let index = file.messages.length - 1;
- function done(err) {
- var messages = file.messages;
- var message;
+ wrap(rule, (error) => {
+ const messages = file.messages;
// Add the error, if not already properly added.
- /* istanbul ignore if - only happens for incorrect plugins */
- if (err && messages.indexOf(err) === -1) {
+ // Only happens for incorrect plugins.
+ /* c8 ignore next 6 */
+ // @ts-expect-error: errors could be `messages`.
+ if (error && !messages.includes(error)) {
try {
- file.fail(err);
- } catch (_) {}
+ file.fail(error);
+ } catch {}
}
- while (index < messages.length) {
- message = messages[index];
- message.ruleId = ruleId;
- message.source = source;
- message.fatal = fatal;
-
- index++;
+ while (++index < messages.length) {
+ Object.assign(messages[index], {ruleId, source, fatal});
}
next();
- }
+ })(tree, file, options);
}
}
}
-// Coerce a value to a severity--options tuple.
-function coerce(name, value) {
- var def = 1;
- var result;
- var level;
+/**
+ * Coerce a value to a severity--options tuple.
+ *
+ * @param {string} name
+ * @param {unknown} value
+ * @returns {SeverityTuple}
+ */
+function coerce$5(name, value) {
+ /** @type {unknown[]} */
+ let result;
- /* istanbul ignore if - Handled by unified in v6.0.0 */
if (typeof value === 'boolean') {
result = [value];
- } else if (value == null) {
- result = [def];
+ } else if (value === null || value === undefined) {
+ result = [1];
} else if (
- typeof value === 'object' &&
- (typeof value[0] === 'number' ||
- typeof value[0] === 'boolean' ||
- typeof value[0] === 'string')
+ Array.isArray(value) &&
+ // `isArray(unknown)` is turned into `any[]`:
+ // type-coverage:ignore-next-line
+ primitives$5.has(typeof value[0])
) {
- result = value.concat();
+ // `isArray(unknown)` is turned into `any[]`:
+ // type-coverage:ignore-next-line
+ result = [...value];
} else {
result = [1, value];
}
- level = result[0];
+ let level = result[0];
if (typeof level === 'boolean') {
level = level ? 1 : 0;
@@ -60690,7 +56380,7 @@ function coerce(name, value) {
}
}
- if (level < 0 || level > 2) {
+ if (typeof level !== 'number' || level < 0 || level > 2) {
throw new Error(
'Incorrect severity `' +
level +
@@ -60703,285 +56393,24 @@ function coerce(name, value) {
result[0] = level;
+ // @ts-expect-error: it’s now a valid tuple.
return result
}
-var convert_1 = convert$1;
-
-function convert$1(test) {
- if (test == null) {
- return ok
- }
-
- if (typeof test === 'string') {
- return typeFactory(test)
- }
-
- if (typeof test === 'object') {
- return 'length' in test ? anyFactory(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
-
- function all(node) {
- var key;
-
- for (key in test) {
- if (node[key] !== test[key]) return false
- }
-
- return true
- }
-}
-
-function anyFactory(tests) {
- var checks = [];
- var index = -1;
-
- 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.
-function typeFactory(test) {
- return type
-
- function type(node) {
- return Boolean(node && node.type === test)
- }
-}
-
-// Utility to return true.
-function ok() {
- return true
-}
-
-var color_1 = color$1;
-function color$1(d) {
- return '\u001B[33m' + d + '\u001B[39m'
-}
-
-var unistUtilVisitParents = visitParents$1;
-
-var convert = convert_1;
-var color = color_1;
-
-var CONTINUE$1 = true;
-var SKIP$1 = 'skip';
-var EXIT$1 = false;
-
-visitParents$1.CONTINUE = CONTINUE$1;
-visitParents$1.SKIP = SKIP$1;
-visitParents$1.EXIT = EXIT$1;
-
-function visitParents$1(tree, test, visitor, reverse) {
- var step;
- var is;
-
- if (typeof test === 'function' && typeof visitor !== 'function') {
- reverse = visitor;
- visitor = test;
- test = null;
- }
-
- is = convert(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;
-
- visit.displayName =
- 'node (' + color(value.type + (name ? '<' + name + '>' : '')) + ')';
- }
-
- return visit
-
- function visit() {
- var grandparents = parents.concat(node);
- var result = [];
- var subresult;
- var offset;
-
- if (!test || is(node, index, parents[parents.length - 1] || null)) {
- result = toResult(visitor(node, parents));
-
- if (result[0] === EXIT$1) {
- return result
- }
- }
-
- 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
- }
-
- offset =
- typeof subresult[1] === 'number' ? subresult[1] : offset + step;
- }
- }
-
- return result
- }
- }
-}
-
-function toResult(value) {
- if (value !== null && typeof value === 'object' && 'length' in value) {
- return value
- }
-
- if (typeof value === 'number') {
- return [CONTINUE$1, value]
- }
-
- return [value]
-}
-
-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);
+const remarkLintProhibitedStrings = lintRule$5('remark-lint:prohibited-strings', prohibitedStrings);
function testProhibited (val, content) {
let regexpFlags = 'g';
let no = val.no;
if (!no) {
- no = escapeStringRegexp$1(val.yes);
+ no = escapeStringRegexp(val.yes);
regexpFlags += 'i';
}
let regexpString = '(?<!\\.|@[a-zA-Z0-9/-]*)';
- const ignoreNextTo = val.ignoreNextTo ? escapeStringRegexp$1(val.ignoreNextTo) : '';
+ const ignoreNextTo = val.ignoreNextTo ? escapeStringRegexp(val.ignoreNextTo) : '';
const replaceCaptureGroups = !!val.replaceCaptureGroups;
// If it starts with a letter, make sure it is a word break.
@@ -61022,13 +56451,13 @@ function testProhibited (val, content) {
}
function prohibitedStrings (ast, file, strings) {
- const location = vfileLocation(file);
+ const myLocation = location(file);
visit(ast, 'text', checkText);
function checkText (node) {
const content = node.value;
- const initial = start$1(node).offset;
+ const initial = pointStart(node).offset;
strings.forEach((val) => {
const results = testProhibited(val, content);
@@ -61036,8 +56465,8 @@ function prohibitedStrings (ast, file, strings) {
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)
+ start: myLocation.toPoint(initial + index),
+ end: myLocation.toPoint(initial + index + [...result].length)
});
});
}
@@ -61046,6 +56475,134 @@ function prohibitedStrings (ast, file, strings) {
}
/**
+ * @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$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 {}
+ }
+
+ 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$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];
+ }
+ }
+
+ 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
@@ -61107,7 +56664,7 @@ function prohibitedStrings (ast, file, strings) {
* 1:1: Incorrect preferred rule style: provide a correct markdown rule or `'consistent'`
*/
-const remarkLintRuleStyle = lintRule(
+const remarkLintRuleStyle = lintRule$4(
'remark-lint:rule-style',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 'consistent') => {
@@ -61119,7 +56676,7 @@ const remarkLintRuleStyle = lintRule(
);
}
- visit$2(tree, 'thematicBreak', (node) => {
+ visit(tree, 'thematicBreak', (node) => {
const initial = pointStart(node).offset;
const final = pointEnd(node).offset;
@@ -61139,6 +56696,134 @@ const remarkLintRuleStyle = lintRule(
var remarkLintRuleStyle$1 = remarkLintRuleStyle;
/**
+ * @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$3 = new Set(['string', 'number', 'boolean']);
+
+/**
+ * @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];
+
+ Object.defineProperty(plugin, 'name', {value: id});
+
+ return plugin
+
+ /** @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;
+
+ 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$3(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$3.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
@@ -61198,7 +56883,7 @@ var remarkLintRuleStyle$1 = remarkLintRuleStyle;
* 1:1: Incorrect strong marker `💩`: use either `'consistent'`, `'*'`, or `'_'`
*/
-const remarkLintStrongMarker = lintRule(
+const remarkLintStrongMarker = lintRule$3(
'remark-lint:strong-marker',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 'consistent') => {
@@ -61212,7 +56897,7 @@ const remarkLintStrongMarker = lintRule(
);
}
- visit$2(tree, 'strong', (node) => {
+ visit(tree, 'strong', (node) => {
const start = pointStart(node).offset;
if (typeof start === 'number') {
@@ -61231,6 +56916,134 @@ const remarkLintStrongMarker = lintRule(
var remarkLintStrongMarker$1 = remarkLintStrongMarker;
/**
+ * @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});
+
+ return plugin
+
+ /** @type {import('unified').Plugin<[unknown]|void[]>} */
+ function plugin(raw) {
+ const [severity, options] = coerce$2(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$2(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$2.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
@@ -61402,7 +57215,7 @@ var remarkLintStrongMarker$1 = remarkLintStrongMarker;
* | Echo | Foxtrot |
*/
-const remarkLintTableCellPadding = lintRule(
+const remarkLintTableCellPadding = lintRule$2(
'remark-lint:table-cell-padding',
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(tree, file, option = 'consistent') => {
@@ -61418,7 +57231,7 @@ const remarkLintTableCellPadding = lintRule(
);
}
- visit$2(tree, 'table', (node) => {
+ visit(tree, 'table', (node) => {
const rows = node.children;
// To do: fix types to always have `align` defined.
/* c8 ignore next */
@@ -61487,7 +57300,7 @@ const remarkLintTableCellPadding = lintRule(
checkSide('end', entries[index], style, sizes);
}
- return SKIP$2
+ return SKIP$1
});
/**
@@ -61568,6 +57381,134 @@ function size(node) {
}
/**
+ * @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
+}
+
+/**
* @author Titus Wormer
* @copyright 2015 Titus Wormer
* @license MIT
@@ -61609,13 +57550,13 @@ function size(node) {
const reasonStart = 'Missing initial pipe in table fence';
const reasonEnd = 'Missing final pipe in table fence';
-const remarkLintTablePipes = lintRule(
+const remarkLintTablePipes = lintRule$1(
'remark-lint:table-pipes',
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
const value = String(file);
- visit$2(tree, 'table', (node) => {
+ visit(tree, 'table', (node) => {
let index = -1;
while (++index < node.children.length) {
@@ -61644,6 +57585,134 @@ const remarkLintTablePipes = lintRule(
var remarkLintTablePipes$1 = remarkLintTablePipes;
/**
+ * @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
+}
+
+/**
* @author Titus Wormer
* @copyright 2015 Titus Wormer
* @license MIT
@@ -61734,7 +57803,7 @@ const remarkLintUnorderedListMarkerStyle = lintRule(
);
}
- visit$2(tree, 'list', (node) => {
+ visit(tree, 'list', (node) => {
if (node.ordered) return
let index = -1;
@@ -61766,10 +57835,10 @@ const remarkLintUnorderedListMarkerStyle = lintRule(
var remarkLintUnorderedListMarkerStyle$1 = remarkLintUnorderedListMarkerStyle;
-// @see https://github.com/nodejs/node/blob/master/doc/guides/doc-style-guide.md
+// @see https://github.com/nodejs/node/blob/HEAD/doc/guides/doc-style-guide.md
// Add in rules alphabetically
-const remarkPresetLintNode = [
+const plugins = [
// Leave preset at the top so it can be overridden
remarkPresetLintRecommended$1,
[remarkLintBlockquoteIndentation$1, 2],
@@ -61844,343 +57913,7 @@ const remarkPresetLintNode = [
[remarkLintUnorderedListMarkerStyle$1, "*"],
];
-var remarkPresetLintNode$1 = /*#__PURE__*/Object.freeze({
- __proto__: null,
- 'default': remarkPresetLintNode
-});
-
-var require$$5 = /*@__PURE__*/getAugmentedNamespace(remarkPresetLintNode$1);
-
-/**
- * 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[]} */
-
- let parameters; // Make start between zero and `end` (included).
-
- if (start < 0) {
- start = -start > end ? 0 : end + start;
- } else {
- start = start > end ? end : start;
- }
-
- remove = remove > 0 ? remove : 0; // No need to chunk the items if there’s only a couple (10k) items.
-
- 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.
-
- 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;
- }
- }
-}
-
-/**
- * @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
- */
-
-const hasOwnProperty = {}.hasOwnProperty;
-
-/**
- * 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;
-
- while (++index < extensions.length) {
- syntaxExtension(all, extensions[index]);
- }
-
- return all
-}
-
-/**
- * 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;
-
- 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;
-
- 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] : []
- );
- }
- }
-}
-
-/**
- * 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 = [];
-
- while (++index < list.length) {
-(list[index].add === 'after' ? existing : before).push(list[index]);
- }
-
- splice(existing, 0, 0, before);
-}
-
-/**
- * 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;
-
- while (++index < htmlExtensions.length) {
- htmlExtension(handlers, htmlExtensions[index]);
- }
-
- return handlers
-}
-
-/**
- * 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;
-
- 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]/;
-
-/**
- * @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`).
- */
-
-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`).
- */
-
-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`).
- */
-
-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}
- */
-
-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 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}
- */
-
-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 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.
- */
-
-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.
-
-const unicodePunctuation = regexCheck(unicodePunctuationRegex);
-/**
- * Create a code check from a regex.
- *
- * @param {RegExp} regex
- * @returns {(code: Code) => code is number}
- */
-
-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))
- }
-}
+const remarkPresetLintNode = { plugins };
/**
* @typedef {import('micromark-util-types').Extension} Extension
@@ -63007,67 +58740,6 @@ const gfmStrikethroughHtml = {
};
/**
- * @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
- }
-
- if (unicodePunctuation(code)) {
- return 2
- }
-}
-
-/**
- * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext
- * @typedef {import('micromark-util-types').Event} Event
- * @typedef {import('micromark-util-types').Resolver} Resolver
- */
-
-/**
- * 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;
-
- while (++index < constructs.length) {
- const resolve = constructs[index].resolveAll;
-
- if (resolve && !called.includes(resolve)) {
- events = resolve(events, context);
- called.push(resolve);
- }
- }
-
- return events
-}
-
-/**
* @typedef {import('micromark-util-types').Extension} Extension
* @typedef {import('micromark-util-types').Resolver} Resolver
* @typedef {import('micromark-util-types').Tokenizer} Tokenizer
@@ -63388,45 +59060,6 @@ function replace$1($0, $1) {
}
/**
- * @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 factorySpace(effects, ok, type, max) {
- const limit = max ? max - 1 : Number.POSITIVE_INFINITY;
- let size = 0;
- return start
- /** @type {State} */
-
- 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)
- }
-}
-
-/**
* @typedef {import('micromark-util-types').Extension} Extension
* @typedef {import('micromark-util-types').Resolver} Resolver
* @typedef {import('micromark-util-types').Tokenizer} Tokenizer
@@ -64233,7 +59866,7 @@ function spaceThenNonSpace(effects, ok, nok) {
* @param {Options} [options]
* @returns {Extension}
*/
-function gfm$1(options) {
+function gfm(options) {
return combineExtensions([
gfmAutolinkLiteral,
gfmStrikethrough(options),
@@ -64277,16 +59910,149 @@ function ccount(value, character) {
return count
}
-function escapeStringRegexp(string) {
- if (typeof string !== 'string') {
- throw new TypeError('Expected a string');
- }
+/**
+ * @param {string} d
+ * @returns {string}
+ */
+function color(d) {
+ return '\u001B[33m' + d + '\u001B[39m'
+}
- // 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');
+/**
+ * @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 {(
+ * (<T extends Node>(tree: Node, test: T['type']|Partial<T>|import('unist-util-is').TestFunctionPredicate<T>|Array.<T['type']|Partial<T>|import('unist-util-is').TestFunctionPredicate<T>>, visitor: Visitor<T>, reverse?: boolean) => void) &
+ * ((tree: Node, test: Test, visitor: Visitor<Node>, reverse?: boolean) => void) &
+ * ((tree: Node, visitor: Visitor<Node>, 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<Node>} 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.<Parent>} parents
+ */
+ function factory(node, index, parents) {
+ /** @type {Object.<string, unknown>} */
+ 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.<Parent>} */
+ 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]
}
/**
@@ -64364,12 +60130,12 @@ const findAndReplace =
settings = {};
}
- const ignored = convert$2(settings.ignore || []);
+ const ignored = convert(settings.ignore || []);
const pairs = toPairs(schema);
let pairIndex = -1;
while (++pairIndex < pairs.length) {
- visitParents$3(tree, 'text', visitor);
+ visitParents(tree, 'text', visitor);
}
return tree
@@ -64526,7 +60292,6 @@ 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
@@ -64579,6 +60344,7 @@ const gfmAutolinkLiteralToMarkdown = {
/** @type {FromMarkdownHandle} */
function enterLiteralAutolink(token) {
+ // @ts-expect-error: `null` is fine.
this.enter({type: 'link', title: null, url: '', children: []}, token);
}
@@ -64595,8 +60361,7 @@ function exitLiteralAutolinkHttp(token) {
/** @type {FromMarkdownHandle} */
function exitLiteralAutolinkWww(token) {
this.config.exit.data.call(this, token);
- const node = /** @type {Link} */ (this.stack[this.stack.length - 1]);
- node.url = 'http://' + this.sliceSerialize(token);
+ this.stack[this.stack.length - 1].url = 'http://' + this.sliceSerialize(token);
}
/** @type {FromMarkdownHandle} */
@@ -64614,8 +60379,8 @@ function transformGfmAutolinkLiterals(tree) {
findAndReplace(
tree,
[
- [/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi, findUrl],
- [/([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/g, findEmail]
+ [/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/i, findUrl],
+ [/([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/, findEmail]
],
{ignore: ['link', 'linkReference']}
);
@@ -64654,6 +60419,7 @@ 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,
@@ -64683,6 +60449,7 @@ 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}]
@@ -64761,71 +60528,6 @@ function previous(match, email) {
}
/**
- * @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.<string>} */
- 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;
- }
-
- // 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: <https://github.com/syntax-tree/mdast-util-to-markdown/issues/15>
- 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, after}));
-
- before = results[results.length - 1].slice(-1);
- }
-
- return results.join('')
-}
-
-/**
* @typedef {import('mdast').Delete} Delete
* @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension
* @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle
@@ -64875,107 +60577,6 @@ function peekDelete() {
}
/**
- * @typedef {import('../types.js').Unsafe} Unsafe
- */
-
-/**
- * @param {Unsafe} pattern
- * @returns {RegExp}
- */
-function patternCompile(pattern) {
- if (!pattern._compiled) {
- const before =
- (pattern.atBreak ? '[\\r\\n][\\t ]*' : '') +
- (pattern.before ? '(?:' + pattern.before + ')' : '');
-
- pattern._compiled = new RegExp(
- (before ? '(' + before + ')' : '') +
- (/[|\\{}()[\]^$+*?.-]/.test(pattern.character) ? '\\' : '') +
- pattern.character +
- (pattern.after ? '(?:' + pattern.after + ')' : ''),
- 'g'
- );
- }
-
- return pattern._compiled
-}
-
-/**
- * @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 MarkdownTableOptions
* @property {string|null|Array.<string|null|undefined>} [align]
* @property {boolean} [padding=true]
@@ -65471,216 +61072,6 @@ function gfmTableToMarkdown(options) {
}
/**
- * @typedef {import('../types.js').Context} Context
- * @typedef {import('../types.js').Options} Options
- */
-
-/**
- * @param {Context} context
- * @returns {Exclude<Options['bullet'], undefined>}
- */
-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<Options['listItemIndent'], undefined>}
- */
-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('../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.<string>} */
- 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<Join>} */
- 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'
- }
-}
-
-/**
- * @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.<string>} */
- 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
* @typedef {import('mdast').BlockContent} BlockContent
@@ -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 baf5c94d62..3cfe12696f 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,64 +2154,6 @@
"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-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-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-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",
@@ -2376,51 +2186,6 @@
"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-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-definition-spacing": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.0.0.tgz",
@@ -2452,51 +2217,6 @@
"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==",
- "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-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",
@@ -2529,51 +2249,6 @@
"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==",
- "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-marker": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.0.0.tgz",
@@ -2605,51 +2280,6 @@
"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": {
- "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-file-extension": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.0.0.tgz",
@@ -2711,51 +2341,6 @@
"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-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-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.0.0.tgz",
@@ -2816,42 +2401,6 @@
"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==",
- "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-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",
@@ -2884,51 +2433,6 @@
"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==",
- "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-heading-style": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.0.0.tgz",
@@ -2961,42 +2465,6 @@
"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": {
- "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-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",
@@ -3028,42 +2496,6 @@
"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==",
- "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-indent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.0.0.tgz",
@@ -3097,51 +2529,6 @@
"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-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-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",
@@ -3174,51 +2561,6 @@
"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",
@@ -3252,51 +2594,6 @@
"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",
@@ -3330,64 +2627,6 @@
"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",
@@ -3422,51 +2661,6 @@
"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",
@@ -3500,51 +2694,6 @@
"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",
@@ -3666,51 +2815,6 @@
"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",
@@ -3744,51 +2848,6 @@
"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",
@@ -3821,42 +2880,6 @@
"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",
@@ -3890,51 +2913,6 @@
"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",
@@ -3968,51 +2946,6 @@
"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",
@@ -4044,42 +2977,6 @@
"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",
@@ -4111,42 +3008,6 @@
"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",
@@ -4178,42 +3039,6 @@
"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",
@@ -4246,64 +3071,6 @@
"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",
@@ -4334,19 +3101,6 @@
"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",
@@ -4389,64 +3143,6 @@
"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",
@@ -4478,42 +3174,6 @@
"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": {
- "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",
@@ -4546,63 +3206,33 @@
"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==",
+ "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-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-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-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": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.0.0.tgz",
@@ -4634,51 +3264,6 @@
"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-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": "^5.0.0",
- "unist-util-visit-parents": "^5.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==",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.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",
@@ -4710,51 +3295,6 @@
"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",
@@ -4787,51 +3327,6 @@
"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==",
- "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-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": "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",
@@ -4863,51 +3358,6 @@
"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==",
- "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-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"
- },
- "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",
@@ -4940,51 +3390,6 @@
"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==",
- "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==",
- "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-parse": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz",
@@ -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"
- }
}
}
},
@@ -7565,35 +5705,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"
- }
}
}
},
@@ -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"
- }
}
}
},
@@ -8558,35 +6245,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"
- }
}
}
},
@@ -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 0602d902c2..56ad44b391 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 531103d729..0a2b2098e6 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 9a32b2b033..b5c5a53dd7 100644
--- a/vcbuild.bat
+++ b/vcbuild.bat
@@ -712,7 +712,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