From 1e1958024578863168a961a15ccb4b5694da1fc3 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sat, 13 Mar 2021 14:36:08 +0000 Subject: [PATCH 01/35] Parser update * Switches underlying node tree from JsonML to a DOM-like structure. * Ribbon interface extended to be able to return contextual sub-slices. * Elements added to parse tree are tagged with source offset-position --- src/Node.js | 219 +++++++++++++++++++++++++++++++++++++++++ src/builder.js | 37 ------- src/constants.js | 15 +++ src/fixlinks.js | 18 ---- src/html.js | 73 ++++++-------- src/index.js | 61 +++++++++--- src/jsonml.js | 88 ----------------- src/ribbon.js | 149 ++++++++++++++++++---------- src/textile/attr.js | 6 +- src/textile/deflist.js | 62 +++++++----- src/textile/flow.js | 218 +++++++++++++++++++++++----------------- src/textile/list.js | 110 +++++++++++---------- src/textile/phrase.js | 219 ++++++++++++++++++++++++----------------- src/textile/table.js | 194 +++++++++++++++++++----------------- test/line-numbers.js | 118 ++++++++++++++++++++++ test/source-offsets.js | 29 ++++++ webpack.config.js | 2 + 17 files changed, 1017 insertions(+), 601 deletions(-) create mode 100644 src/Node.js delete mode 100644 src/builder.js create mode 100644 src/constants.js delete mode 100644 src/fixlinks.js delete mode 100644 src/jsonml.js create mode 100644 test/line-numbers.js create mode 100644 test/source-offsets.js diff --git a/src/Node.js b/src/Node.js new file mode 100644 index 0000000..d453bd2 --- /dev/null +++ b/src/Node.js @@ -0,0 +1,219 @@ +const { singletons } = require('./constants'); + +const NODE = 0; +const ELEMENT_NODE = 1; +const RAW_NODE = -1; +const TEXT_NODE = 3; +const DOCUMENT_NODE = 9; +const COMMENT_NODE = 8; + +function escape (text, escapeQuotes) { + return text.replace(/&(?!(#\d{2,}|#x[\da-fA-F]{2,}|[a-zA-Z][a-zA-Z1-4]{1,6});)/g, '&') + .replace(//g, '>') + .replace(/"/g, escapeQuotes ? '"' : '"') + .replace(/'/g, escapeQuotes ? ''' : "'"); +} + +function renderAttr (attr) { + let tagAttrs = ''; + for (const a in attr) { + if (a[0] !== '_') { + tagAttrs += (attr[a] == null) + ? ` ${a}` + : ` ${a}="${escape(String(attr[a]), true)}"`; + } + } + return tagAttrs; +} + +function appendTo (parent, child) { + // FIXME: implement NodeList? + if (Array.isArray(child)) { + child.forEach(n => parent.appendChild(n)); + } + else { + // RAW nodes should be joined as well + if (child.nodeType === TEXT_NODE || child.nodeType === RAW_NODE) { + const lastChild = parent.children[parent.children.length - 1]; + if (lastChild && lastChild.nodeType === child.nodeType) { + lastChild.data += child.data; + return lastChild; + } + } + parent.children.push(child); + } + return child; +} + +class Node { + constructor (tagName) { + this.nodeType = NODE; + this.pos = { offset: null }; + } + + toHTML () { + const { tagName, children } = this; + if (!tagName) { + return ''; + } + // be careful about adding whitespace here for inline elements + if (tagName in singletons || (tagName.includes(':') && !children.length)) { + return `<${tagName}${renderAttr(this.attr)} />`; + } + else { + const innerHTML = this.children.map(d => d.toHTML()); + return `<${tagName}${renderAttr(this.attr)}>${innerHTML.join('')}`; + } + } + + visit (fn) { + fn(this); + if (this.children) { + this.children.forEach(child => child.visit(fn)); + } + return this; + } + + setPos (offset) { + this.pos.offset = offset; + return this; + } +}; + +class TextNode extends Node { + constructor (data) { + super(); + this.nodeType = TEXT_NODE; + this.data = String(data); + } + + toHTML () { + return escape(this.data); + } +} + +// Essentially this is the same as a textnode except it should not +// merge with textnodes, and should not be post-processed. +class RawNode extends Node { + constructor (data) { + super(); + this.nodeType = RAW_NODE; + this.data = String(data); + } + + toHTML () { + return escape(this.data); + } +} + +class CommentNode extends Node { + constructor (data) { + super(); + this.nodeType = COMMENT_NODE; + this.data = String(data); + } + + toHTML () { + return ``; + } +} + +class Element extends Node { + constructor (tagName, attr, offsetPos) { + super(); + this.tagName = tagName; + this.nodeType = ELEMENT_NODE; + this.attr = Object.assign({}, attr); + if (offsetPos != null) { + this.pos.offset = offsetPos; + } + this.children = []; + } + + // FIXME: move to a utility function that can be passed to node.visit() + // drop or add tab levels + reIndent (shiftBy) { + if (shiftBy) { + const children = this.children; + children.forEach(child => { + if (child instanceof TextNode) { + if (/^\n\t+/.test(child.data)) { + if (shiftBy < 0) { + child.data = child.data.slice(0, shiftBy); + } + else { + for (let i = 0; i < shiftBy; i++) { + child.data += '\t'; + } + } + } + } + else if (child instanceof Element) { + child.reIndent(shiftBy); + } + }); + } + return this; + } + + appendChild (node) { + return appendTo(this, node); + } + + get firstChild () { + return this.children[0]; + } + + setAttr (attr) { + for (const key in attr) { + this.setAttribute(key, attr[key]); + } + } + + getAttribute (name) { + return name in this.attr ? this.attr[name] : null; + } + + setAttribute (name, value) { + this.attr[name] = value; + } +} + +class Document extends Node { + constructor (data) { + super(); + this.nodeType = DOCUMENT_NODE; + this.children = []; + } + + toHTML () { + return this.children.map(d => d.toHTML()).join(''); + } + + get firstChild () { + return this.children[0]; + } + + // FIXME: this is the same a + appendChild (node) { + return appendTo(this, node); + } +} + +// expose constants as static props +[ Node, RawNode, TextNode, CommentNode, Element, Document ].forEach(d => { + d.NODE = NODE; + d.ELEMENT_NODE = ELEMENT_NODE; + d.RAW_NODE = RAW_NODE; + d.TEXT_NODE = TEXT_NODE; + d.DOCUMENT_NODE = DOCUMENT_NODE; + d.COMMENT_NODE = COMMENT_NODE; +}); + +exports.Node = Node; +exports.RawNode = RawNode; +exports.TextNode = TextNode; +exports.CommentNode = CommentNode; +exports.Element = Element; +exports.Document = Document; diff --git a/src/builder.js b/src/builder.js deleted file mode 100644 index 9ef2504..0000000 --- a/src/builder.js +++ /dev/null @@ -1,37 +0,0 @@ -module.exports = function builder (initArr) { - const arr = Array.isArray(initArr) ? initArr : []; - - return { - add: function (node) { - if (typeof node === 'string' && - typeof arr[arr.length - 1] === 'string') { - // join if possible - arr[arr.length - 1] += node; - } - else if (Array.isArray(node)) { - arr.push(node.filter(s => s !== undefined)); - } - else if (node) { - arr.push(node); - } - return this; - }, - - merge: function (arr) { - for (let i = 0, l = arr.length; i < l; i++) { - this.add(arr[i]); - } - return this; - }, - - linebreak: function () { - if (arr.length) { - this.add('\n'); - } - }, - - get: function () { - return arr; - } - }; -}; diff --git a/src/constants.js b/src/constants.js new file mode 100644 index 0000000..10d1a79 --- /dev/null +++ b/src/constants.js @@ -0,0 +1,15 @@ +exports.singletons = { + area: 1, + base: 1, + br: 1, + col: 1, + embed: 1, + hr: 1, + img: 1, + input: 1, + link: 1, + meta: 1, + option: 1, + param: 1, + wbr: 1 +}; diff --git a/src/fixlinks.js b/src/fixlinks.js deleted file mode 100644 index 19ace91..0000000 --- a/src/fixlinks.js +++ /dev/null @@ -1,18 +0,0 @@ -// recurse the tree and swap out any "href" attributes -// this uses the context as the replace dictionary so it can be fed to Array#map -module.exports = function fixLinks (ml, dict) { - if (Array.isArray(ml)) { - if (ml[0] === 'a') { // found a link - const attr = ml[1]; - if (typeof attr === 'object' && 'href' in attr && attr.href in dict) { - attr.href = dict[attr.href]; - } - } - for (let i = 0, l = ml.length; i < l; i++) { - if (Array.isArray(ml[i])) { - fixLinks(ml[i], dict); - } - } - } - return ml; -}; diff --git a/src/html.js b/src/html.js index 0cf9d98..e169d4a 100644 --- a/src/html.js +++ b/src/html.js @@ -1,5 +1,7 @@ const re = require('./re'); -const ribbon = require('./ribbon'); +const Ribbon = require('./Ribbon'); +const { Element, TextNode, CommentNode } = require('./Node'); +const { singletons } = require('./constants'); re.pattern.html_id = '[a-zA-Z][a-zA-Z\\d:]*'; re.pattern.html_attr = '(?:"[^"]+"|\'[^\']+\'|[^>\\s]+)'; @@ -10,22 +12,6 @@ const reEndTag = re.compile(/^<\/([:html_id:])([^>]*)>/); const reTag = re.compile(/^<([:html_id:])((?:\s[^=\s/]+(?:\s*=\s*[:html_attr:])?)+)?\s*(\/?)>/); const reHtmlTagBlock = re.compile(/^\s*<([:html_id:](?::[a-zA-Z\d]+)*)((?:\s[^=\s/]+(?:\s*=\s*[:html_attr:])?)+)?\s*(\/?)>/); -const singletons = { - area: 1, - base: 1, - br: 1, - col: 1, - embed: 1, - hr: 1, - img: 1, - input: 1, - link: 1, - meta: 1, - option: 1, - param: 1, - wbr: 1 -}; - function testComment (src) { return reComment.exec(src); } @@ -46,9 +32,11 @@ function parseHtmlAttr (attrSrc) { // parse ATTR and add to element const attr = {}; let m; - while ((m = reAttr.exec(attrSrc))) { - attr[m[1]] = (typeof m[2] === 'string') ? m[2].replace(/^(["'])(.*)\1$/, '$2') : null; - attrSrc = attrSrc.slice(m[0].length); + if (attrSrc) { + while ((m = reAttr.exec(attrSrc))) { + attr[m[1]] = (typeof m[2] === 'string') ? m[2].replace(/^(["'])(.*)\1$/, '$2') : null; + attrSrc = attrSrc.slice(m[0].length); + } } return attr; } @@ -60,7 +48,7 @@ const TEXT = 'TEXT'; const COMMENT = 'COMMENT'; const WS = 'WS'; -function tokenize (src, whitelistTags, lazy) { +function tokenize (src, whitelistTags, lazy, offset) { const tokens = []; let textMode = false; const oktag = tag => { @@ -76,7 +64,7 @@ function tokenize (src, whitelistTags, lazy) { let nestCount = 0; let m; - src = ribbon(String(src)); + src = new Ribbon(String(src), offset); do { // comment @@ -84,7 +72,7 @@ function tokenize (src, whitelistTags, lazy) { tokens.push({ type: COMMENT, data: m[1], - pos: src.index(), + pos: src.index, src: m[0] }); src.advance(m[0]); @@ -95,7 +83,7 @@ function tokenize (src, whitelistTags, lazy) { const token = { type: CLOSE, tag: m[1], - pos: src.index(), + pos: src.index, src: m[0] }; src.advance(m[0]); @@ -121,12 +109,11 @@ function tokenize (src, whitelistTags, lazy) { const token = { type: m[3] || m[1] in singletons ? SINGLE : OPEN, tag: m[1], - pos: src.index(), + pos: src.index, src: m[0] }; - if (m[2]) { - token.attr = parseHtmlAttr(m[2]); - } + token.attr = parseHtmlAttr(m[2]); + // token.attr = src.addOffset(parseHtmlAttr(m[2])); // some elements can move parser into "text" mode if (m[1] === 'script' || m[1] === 'code' || m[1] === 'style') { textMode = token.tag; @@ -134,7 +121,6 @@ function tokenize (src, whitelistTags, lazy) { if (token.type === OPEN) { nestCount++; nesting[token.tag] = (nesting[token.tag] || 0) + 1; - // console.log( token.tag, nestCount, nesting ); } tokens.push(token); src.advance(m[0]); @@ -148,7 +134,7 @@ function tokenize (src, whitelistTags, lazy) { tokens.push({ type: TEXT, data: m[0], - pos: src.index(), + pos: src.index, src: m[0] }); } @@ -163,26 +149,30 @@ function tokenize (src, whitelistTags, lazy) { // This "indesciminately" parses HTML text into a list of JSON-ML element // No steps are taken however to prevent things like

- user can still create nonsensical but "well-formed" markup function parse (tokens, lazy) { - const root = []; + const root = new Element('root'); const stack = []; let curr = root; let token; for (let i = 0; i < tokens.length; i++) { token = tokens[i]; if (token.type === COMMENT) { - curr.push([ '!', token.data ]); + // curr.push([ '!', token.data ]); + curr.appendChild(new CommentNode(token.data)); } else if (token.type === TEXT || token.type === WS) { - curr.push(token.data); + // curr.push(token.data); + curr.appendChild(new TextNode(token.data)); } else if (token.type === SINGLE) { - curr.push(token.attr ? [ token.tag, token.attr ] : [ token.tag ]); + // curr.push(token.attr ? [ token.tag, token.attr ] : [ token.tag ]); + curr.appendChild(new Element(token.tag, token.attr)); } else if (token.type === OPEN) { // TODO: some things auto close other things: ,
  • ,

    , // https://html.spec.whatwg.org/multipage/syntax.html#syntax-tag-omission - const elm = token.attr ? [ token.tag, token.attr ] : [ token.tag ]; - curr.push(elm); + // const elm = token.attr ? [ token.tag, token.attr ] : [ token.tag ]; + // curr.push(elm); + const elm = curr.appendChild(new Element(token.tag, token.attr)); stack.push(elm); curr = elm; } @@ -190,7 +180,7 @@ function parse (tokens, lazy) { if (stack.length) { for (let i = stack.length - 1; i >= 0; i--) { const head = stack[i]; - if (head[0] === token.tag) { + if (head.tagName === token.tag) { stack.splice(i); curr = stack[stack.length - 1] || root; break; @@ -198,17 +188,16 @@ function parse (tokens, lazy) { } } if (!stack.length && lazy) { - root.sourceLength = token.pos + token.src.length; - return root; + root.children.sourceLength = token.pos + token.src.length; + return root.children; } } } - root.sourceLength = token ? token.pos + token.src.length : 0; - return root; + root.children.sourceLength = token ? token.pos + token.src.length : 0; + return root.children; } module.exports = { - singletons: singletons, tokenize: tokenize, parseHtml: parse, parseHtmlAttr: parseHtmlAttr, diff --git a/src/index.js b/src/index.js index ab382f0..d4b14e4 100644 --- a/src/index.js +++ b/src/index.js @@ -6,35 +6,70 @@ */ const merge = require('./merge'); -const { toHTML } = require('./jsonml'); const { parseFlow } = require('./textile/flow'); const { parseHtml } = require('./html'); +const { Document, Element, RawNode, TextNode, CommentNode } = require('./Node'); -function textile (txt, opt) { +function parse (tx, opt) { + const root = new Document(); + root.pos.offset = 0; + root.appendChild(parseFlow(tx, opt)); + return root; +} + +function addLines (rootNode, sourceTx) { + // find newlines + const newlineIndexes = []; + let pos = sourceTx.indexOf('\n'); + while (pos >= 0) { + newlineIndexes.push(pos); + pos = sourceTx.indexOf('\n', pos + 1); + } + // convert offsets to zero-based line numbers + let index = 0; + rootNode.visit(d => { + const offset = d.pos.offset; + if (offset !== null) { + while (newlineIndexes[index] < offset) { + index++; + } + d.pos.line = index; + } + }); + // return the rootNode + return rootNode; +} + +function textile (sourceTx, opt) { // get a throw-away copy of options - opt = merge(merge({}, textile.defaults), opt || {}); + opt = Object.assign({}, textile.defaults, opt); // run the converter - return parseFlow(txt, opt).map(toHTML).join(''); + return parse(sourceTx, opt).toHTML(); }; -module.exports = textile; + +textile.CommentNode = CommentNode; +textile.Document = Document; +textile.Element = Element; +textile.RawNode = RawNode; +textile.TextNode = TextNode; // options textile.defaults = { // single-line linebreaks are converted to
    by default breaks: true }; -textile.setOptions = textile.setoptions = function (opt) { + +textile.setOptions = textile.setoptions = opt => { merge(textile.defaults, opt); return this; }; textile.parse = textile.convert = textile; -textile.html_parser = parseHtml; +textile.parseHtml = parseHtml; -textile.jsonml = function (txt, opt) { - // get a throw-away copy of options - opt = merge(merge({}, textile.defaults), opt || {}); - // parse and return tree - return [ 'html' ].concat(parseFlow(txt, opt)); +textile.parseTree = function (sourceTx, opt) { + opt = Object.assign({}, textile.defaults, opt); + return addLines(parse(sourceTx, opt), sourceTx); }; -textile.serialize = toHTML; + +module.exports = textile; diff --git a/src/jsonml.js b/src/jsonml.js deleted file mode 100644 index b77130e..0000000 --- a/src/jsonml.js +++ /dev/null @@ -1,88 +0,0 @@ -/* -** JSONML helper methods - http://www.jsonml.org/ -** -** This provides the `JSONML` object, which contains helper -** methods for rendering JSONML to HTML. -** -** Note that the tag ! is taken to mean comment, this is however -** not specified in the JSONML spec. -*/ - -const singletons = require('./html').singletons; - -// drop or add tab levels to JsonML tree -function reIndent (ml, shiftBy) { - // a bit obsessive, but there we are... - if (!shiftBy) { - return ml; - } - return ml.map(function (s) { - if (/^\n\t+/.test(s)) { - if (shiftBy < 0) { - s = s.slice(0, shiftBy); - } - else { - for (let i = 0; i < shiftBy; i++) { - s += '\t'; - } - } - } - else if (Array.isArray(s)) { - return reIndent(s, shiftBy); - } - return s; - }); -} - -function escape (text, escapeQuotes) { - return text.replace(/&(?!(#\d{2,}|#x[\da-fA-F]{2,}|[a-zA-Z][a-zA-Z1-4]{1,6});)/g, '&') - .replace(//g, '>') - .replace(/"/g, escapeQuotes ? '"' : '"') - .replace(/'/g, escapeQuotes ? ''' : "'"); -} - -function toHTML (jsonml) { - jsonml = jsonml.concat(); - - // basic case - if (typeof jsonml === 'string') { - return escape(jsonml); - } - - const tag = jsonml.shift(); - let attributes = {}; - let tagAttrs = ''; - const content = []; - - if (jsonml.length && typeof jsonml[0] === 'object' && !Array.isArray(jsonml[0])) { - attributes = jsonml.shift(); - } - - while (jsonml.length) { - content.push(toHTML(jsonml.shift())); - } - - for (const a in attributes) { - tagAttrs += (attributes[a] == null) - ? ` ${a}` - : ` ${a}="${escape(String(attributes[a]), true)}"`; - } - - // be careful about adding whitespace here for inline elements - if (tag === '!') { - return ``; - } - else if (tag in singletons || (tag.indexOf(':') > -1 && !content.length)) { - return `<${tag}${tagAttrs} />`; - } - else { - return `<${tag}${tagAttrs}>${content.join('')}`; - } -} - -module.exports = { - reIndent: reIndent, - toHTML: toHTML, - escape: escape -}; diff --git a/src/ribbon.js b/src/ribbon.js index 2691805..97160bc 100644 --- a/src/ribbon.js +++ b/src/ribbon.js @@ -1,62 +1,105 @@ -module.exports = function ribbon (feed) { - const org = String(feed); - let slot; - let pos = 0; - const self = { - - index: () => { - return pos; - }, - - save: () => { - slot = pos; - return self; - }, - - load: () => { - pos = slot; - feed = org.slice(pos); - return self; - }, - - advance: n => { - pos += (typeof n === 'string') ? n.length : n; - feed = org.slice(pos); - return feed; - }, - - skipWS: () => { - const ws = /^\s+/.exec(feed); - if (ws) { - pos += ws[0].length; - feed = org.slice(pos); - return ws[0]; - } - return ''; - }, +module.exports = class Ribbon { + constructor (feed, skew = 0) { + this._org = String(feed); + this._feed = this._org; + this.slot = [ 0, skew ]; + this.index = 0; + this.skew = skew; + } + + get offset () { + return this.index + this.skew; + } + + get length () { + return this._feed.length; + } + + save () { + this.slot = [ this.index, this.skew ]; + } + + load () { + this.index = this.slot[0]; + this.skew = this.slot[1]; + this._feed = this._org.slice(this.index); + } + + advance (n) { + this.index += (typeof n === 'string') ? n.length : n; + this._feed = this._org.slice(this.index); + // return this._feed; + } + + charAt (n) { + return this._feed.charAt(n); + } - lookbehind: nchars => { - nchars = nchars == null ? 1 : nchars; - return org.slice(pos - nchars, pos); - }, + equals (str) { + return this._feed === str; + } + + skipRe (re) { + const m = re.exec(this._feed); + if (m) { + this.advance(m[0]); + return m[0]; + } + return ''; + } + + skipWS () { + return this.skipRe(/^\s+/); + } + + splitBy (re, cb) { + let i = 0; + do { + const m = re.exec(this._feed); + if (m) { + cb(this.sub(0, m.index), i); + this.advance(m.index + m[0].length); + } + else { + cb(this.sub(0), i); + this.advance(this.length); + break; + } + i++; + } + while (this.length); + return this; + } - startsWith: s => { - return feed.substring(0, s.length) === s; - }, + trim () { + const start = /^\s*/.exec(this._feed)[0].length; + const end = /\s*$/.exec(this._feed)[0].length; + return this.sub(start, this._feed.length - end - start); + } - slice: (a, b) => { - return b != null ? feed.slice(a, b) : feed.slice(a); - }, + lookbehind (nchars) { + nchars = nchars == null ? 1 : nchars; + return this._org.slice(this.index - nchars, this.index); + } - valueOf: () => { - return feed; - }, + startsWith (s) { + return this._feed.slice(0, s.length) === s; + } - toString: () => { - return feed; + sub (start = 0, len) { + if (len == null) { + len = this._feed.length - start; } + const slice = new Ribbon(this._feed.slice(start, Math.max(0, start + len))); + slice.skew = this.index + this.skew + start; + return slice; + } - }; + valueOf () { + return this._feed; + } - return self; + toString () { + return this._feed; + } }; diff --git a/src/textile/attr.js b/src/textile/attr.js index b0ed421..f2e212b 100644 --- a/src/textile/attr.js +++ b/src/textile/attr.js @@ -56,9 +56,9 @@ function testBlock (name) { out there in the real world. So this attempts to emulate the other libraries. */ function parseAttr (input, element, endToken) { - input = String(input); + input = String(input || ''); if (!input || element === 'notextile') { - return undefined; + return [ 0, {} ]; } let m; @@ -175,7 +175,7 @@ function parseAttr (input, element, endToken) { delete o.style; } - return (remaining === input) ? undefined : [ input.length - remaining.length, o ]; + return (remaining === input) ? [ 0, {} ] : [ input.length - remaining.length, o ]; } module.exports = { diff --git a/src/textile/deflist.js b/src/textile/deflist.js index 2adf394..eec5cd6 100644 --- a/src/textile/deflist.js +++ b/src/textile/deflist.js @@ -1,46 +1,58 @@ /* definitions list parser */ +const { Element, TextNode } = require('../Node'); -const ribbon = require('../ribbon'); - -const reDeflist = /^((?:- (?:[^\n]\n?)+?)+:=(?: *\n[^\0]+?=:(?:\n|$)|(?:[^\0]+?(?:$|\n(?=\n|- )))))+/; -const reItem = /^((?:- (?:[^\n]\n?)+?)+):=( *\n[^\0]+?=:\s*(?:\n|$)|(?:[^\0]+?(?:$|\n(?=\n|- ))))/; +const reDeflist = /^((?:- (?:[^\n]\n?)+?)+(:=)(?: *\n[^\0]+?=:(?:\n|$)|(?:[^\0]+?(?:$|\n(?=\n|- )))))+/; +const reItem = /^((?:- (?:[^\n]\n?)+?)+)(:=)( *\n[^\0]+?=:\s*(?:\n|$)|(?:[^\0]+?(?:$|\n(?=\n|- ))))/; function testDefList (src) { return reDeflist.exec(src); } function parseDefList (src, options) { - src = ribbon(src.trim()); - // late loading to get around the lack of non-circular-dependency support in RequireJS const parsePhrase = require('./phrase').parsePhrase; const parseFlow = require('./flow').parseFlow; - const deflist = [ 'dl', '\n' ]; - let terms; - let def; - let m; + const deflist = new Element('dl').setPos(src.offset); + deflist.appendChild(new TextNode('\n')); + let m; while ((m = reItem.exec(src))) { // add terms - terms = m[1].split(/(?:^|\n)- /).slice(1); - while (terms.length) { - deflist.push('\t', - [ 'dt' ].concat(parsePhrase(terms.shift().trim(), options)), - '\n' - ); - } + src + .sub(0, m[1].length) + .splitBy(/(?:^|\n)- /, (bit, i) => { + if (i) { + const term = new Element('dt').setPos(src.offset); + term.appendChild(parsePhrase(bit.trim(), options)); + deflist.appendChild([ new TextNode('\t'), term, new TextNode('\n') ]); + } + }); + src.advance(m[1].length); + + deflist.appendChild(new TextNode('\t')); + // add definitions - def = m[2].trim(); - deflist.push('\t', - [ 'dd' ].concat( - (/=:$/.test(def)) - ? parseFlow(def.slice(0, -2).trim(), options) - : parsePhrase(def, options) - ), '\n' + const defElm = deflist.appendChild( + new Element('dd').setPos(src.offset) ); - src.advance(m[0]); + const def = src + .sub(m[2].length, m[3].length) + .trim(); + if (/=:$/.test(def)) { + defElm.appendChild( + parseFlow(def.sub(0, def.length - 2).trim(), options) + ); + } + else { + defElm.appendChild(parsePhrase(def, options)); + } + + deflist.appendChild(new TextNode('\n')); + + src.advance(m[2].length + m[3].length); } + return deflist; } diff --git a/src/textile/flow.js b/src/textile/flow.js index 0d98676..c85009d 100644 --- a/src/textile/flow.js +++ b/src/textile/flow.js @@ -1,12 +1,12 @@ /* ** textile flow content parser */ -const builder = require('../builder'); -const ribbon = require('../ribbon'); +const Ribbon = require('../Ribbon'); +const { Element, TextNode, RawNode, CommentNode } = require('../Node'); const re = require('../re'); -const fixLinks = require('../fixlinks'); -const { parseHtml, tokenize, parseHtmlAttr, singletons, testComment, testOpenTagBlock } = require('../html'); +const { parseHtml, tokenize, parseHtmlAttr, testComment, testOpenTagBlock } = require('../html'); +const { singletons } = require('../constants'); const { parsePhrase } = require('./phrase'); const { copyAttr, parseAttr } = require('./attr'); @@ -45,47 +45,41 @@ const reRuler = /^(---+|\*\*\*+|___+)(\r?\n\s+|$)/; const reLinkRef = re.compile(/^\[([^\]]+)\]((?:https?:\/\/|\/)\S+)(?:\s*\n|$)/); const reFootnoteDef = /^fn\d+$/; -const hasOwn = Object.prototype.hasOwnProperty; -function extend (target, ...args) { - for (let i = 1; i < args.length; i++) { - const src = args[i]; - if (src != null) { - for (const nextKey in src) { - if (hasOwn.call(src, nextKey)) { - target[nextKey] = src[nextKey]; - } - } - } +const getBlockRe = (blockType, isExtended) => { + if (blockType === 'bc' || blockType === 'pre') { + return isExtended ? reBlockExtendedPre : reBlockNormalPre; } - return target; -} - + return isExtended ? reBlockExtended : reBlockNormal; +}; -function paragraph (s, tag, pba, linebreak, options) { - tag = tag || 'p'; +function paragraph (src, { tag = 'p', attr = {}, linebreak = '\n', options }) { let out = []; - s.split(/(?:\r?\n){2,}/).forEach(function (bit, i) { + src.splitBy(/(?:\r?\n){2,}/, (bit, i) => { if (tag === 'p' && /^\s/.test(bit)) { // no-paragraphs - bit = bit.replace(/\r?\n[\t ]/g, ' ').trim(); - out = out.concat(parsePhrase(bit, options)); + out = out.concat(parsePhrase(bit.trim(), options)); } else { - if (linebreak && i) { out.push(linebreak); } - out.push(pba ? [ tag, pba ].concat(parsePhrase(bit, options)) - : [ tag ].concat(parsePhrase(bit, options))); + if (linebreak && i) { + out.push(new TextNode('\n')); + } + const elm = new Element(tag, attr, bit.offset); + elm.appendChild(parsePhrase(bit, options)); + out.push(elm); } }); return out; }; function parseFlow (src, options) { - const list = builder(); + const root = new Element('root'); let linkRefs; let m; - src = ribbon(src.replace(/^( *\r?\n)+/, '')); + if (!(src instanceof Ribbon)) { + src = new Ribbon(src.replace(/^( *\r?\n)+/, '')); + } // loop while (src.valueOf()) { @@ -93,86 +87,118 @@ function parseFlow (src, options) { // link_ref -- this goes first because it shouldn't trigger a linebreak if ((m = reLinkRef.exec(src))) { - if (!linkRefs) { linkRefs = {}; } + if (!linkRefs) { + linkRefs = {}; + } src.advance(m[0]); linkRefs[m[1]] = m[2]; continue; } // add linebreak - list.linebreak(); + if (root.children.length) { + root.appendChild(new TextNode('\n')); + } // named block if ((m = reBlock.exec(src))) { + const outerOffs = src.offset; + const attr = {}; src.advance(m[0]); const blockType = m[0]; - let pba = parseAttr(src, blockType); + const [ step, _attr ] = parseAttr(src, blockType); + Object.assign(attr, _attr); + src.advance(step); - if (pba) { - src.advance(pba[0]); - pba = pba[1]; - } if ((m = /^\.(\.?)(?:\s|(?=:))/.exec(src))) { // FIXME: this whole copyAttr seems rather strange? // slurp rest of block - const extended = !!m[1]; - let reBlockGlob = (extended ? reBlockExtended : reBlockNormal); - if (blockType === 'bc' || blockType === 'pre') { - reBlockGlob = (extended ? reBlockExtendedPre : reBlockNormalPre); - } - m = reBlockGlob.exec(src.advance(m[0])); src.advance(m[0]); + + m = getBlockRe(blockType, !!m[1]).exec(src); + const inner = src.sub(0, m[1].length); + // bq | bc | notextile | pre | h# | fn# | p | ### if (blockType === 'bq') { - let inner = m[1]; - if ((m = /^:(\S+)\s+/.exec(inner))) { - if (!pba) { pba = {}; } - pba.cite = m[1]; - inner = inner.slice(m[0].length); + const mCite = /^:(\S+)\s+/.exec(inner); + if (mCite) { + attr.cite = mCite[1]; + inner.advance(mCite[0]); } - // RedCloth adds all attr to both: this is bad because it produces duplicate IDs - const par = paragraph(inner, 'p', copyAttr(pba, { cite: 1, id: 1 }), '\n', options); - list.add([ 'blockquote', pba, '\n' ].concat(par).concat([ '\n' ])); + // RedCloth adds all attr to both which is bad because it produces duplicate IDs + const par = paragraph(inner, { + attr: copyAttr(attr, { cite: 1, id: 1 }), + options: options + }); + root + .appendChild(new Element('blockquote', attr, outerOffs)) + .appendChild([ new TextNode('\n'), ...par, new TextNode('\n') ]); } + else if (blockType === 'bc') { - const subPba = (pba) ? copyAttr(pba, { id: 1 }) : null; - list.add([ 'pre', pba, (subPba ? [ 'code', subPba, m[1] ] : [ 'code', m[1] ]) ]); + root + .appendChild(new Element('pre', attr, outerOffs)) + .appendChild(new Element('code', copyAttr(attr, { id: 1 }), outerOffs)) + .appendChild(new RawNode(inner)); } + else if (blockType === 'notextile') { - list.merge(parseHtml(tokenize(m[1]))); + root.appendChild(parseHtml(tokenize(inner))); } + else if (blockType === '###') { // ignore the insides + // FIXME: consider adding an option to expose these as HTML comments? + // FIXME: consider adding these to the parse tree and block on render? } + else if (blockType === 'pre') { // I disagree with RedCloth, but agree with PHP here: // "pre(foo#bar).. line1\n\nline2" prevents multiline preformat blocks // ...which seems like the whole point of having an extended pre block? - list.add([ 'pre', pba, m[1] ]); + root + .appendChild(new Element('pre', attr, outerOffs)) + .appendChild(new RawNode(inner)); } + else if (reFootnoteDef.test(blockType)) { // footnote // Need to be careful: RedCloth fails "fn1(foo#m). footnote" -- it confuses the ID const fnid = blockType.replace(/\D+/g, ''); - if (!pba) { pba = {}; } - pba.class = (pba.class ? pba.class + ' ' : '') + 'footnote'; - pba.id = 'fn' + fnid; - list.add([ 'p', pba, [ 'a', { href: '#fnr' + fnid }, [ 'sup', fnid ] ], ' ' ] - .concat(parsePhrase(m[1], options))); + const pos = src.offset; + attr.class = (attr.class ? attr.class + ' ' : '') + 'footnote'; + attr.id = 'fn' + fnid; + const subAttr = copyAttr(attr, { id: 1, class: 1 }); + const fnLink = new Element('a', { href: '#fnr' + fnid, ...subAttr }, pos); + fnLink + .appendChild(new Element('sup', subAttr, pos)) + .appendChild(new TextNode(fnid)); + root + .appendChild(new Element('p', attr, pos)) + .appendChild([ + fnLink, + new TextNode(' '), + ...parsePhrase(inner, options) + ]); } + else { // heading | paragraph - list.merge(paragraph(m[1], blockType, pba, '\n', options)); + const par = paragraph(inner, { tag: blockType, attr, options }); + // first paragraph must use outer offset + par[0].setPos(outerOffs); + root.appendChild(par); } + + src.advance(m[0]); continue; } - else { - src.load(); - } + + src.load(); } // HTML comment if ((m = testComment(src))) { + root.appendChild(new CommentNode(m[1])); src.advance(m[0] + (/(?:\s*\n+)+/.exec(src) || [])[0]); - list.add([ '!', m[1] ]); continue; } @@ -182,12 +208,12 @@ function parseFlow (src, options) { // Is block tag? ... if (tag in allowedBlocktags) { + const pos = src.off; if (m[3] || tag in singletons) { // single? src.advance(m[0]); if (/^\s*(\n|$)/.test(src)) { - const elm = [ tag ]; - if (m[2]) { elm.push(parseHtmlAttr(m[2])); } - list.add(elm); + const attr = parseHtmlAttr(m[2]); + root.appendChild(new Element(tag, attr, pos)); src.skipWS(); continue; } @@ -195,9 +221,10 @@ function parseFlow (src, options) { else if (tag === 'pre') { const t = tokenize(src, { pre: 1, code: 1 }, tag); const p = parseHtml(t, true); - src.load().advance(p.sourceLength); + src.load(); + src.advance(p.sourceLength); if (/^\s*(\n|$)/.test(src)) { - list.merge(p); + root.appendChild(p); src.skipWS(); // skip tailing whitespace continue; } @@ -211,9 +238,10 @@ function parseFlow (src, options) { } const p = parseHtml(t.slice(s, -1), true); const x = t.pop(); - src.load().advance(x.pos + x.src.length); + src.load(); + src.advance(x.pos + x.src.length); if (/^\s*(\n|$)/.test(src)) { - list.merge(p); + root.appendChild(p); src.skipWS(); // skip tailing whitespace continue; } @@ -228,30 +256,29 @@ function parseFlow (src, options) { } if (x.tag === tag) { // inner can be empty - const inner = (t.length > 1) ? src.slice(t[s].pos, x.pos) : ''; + const inner = (t.length > 1) ? String(src).slice(t[s].pos, x.pos) : ''; src.advance(x.pos + x.src.length); if (/^\s*(\n|$)/.test(src)) { - let elm = [ tag ]; - if (m[2]) { elm.push(parseHtmlAttr(m[2])); } + const elm = new Element(tag, parseHtmlAttr(m[2])); if (tag === 'script' || tag === 'style') { - elm.push(inner); + elm.appendChild(new TextNode(inner)); } else { const innerHTML = inner.replace(/^\n+/, '').replace(/\s*$/, ''); const isBlock = /\n\r?\n/.test(innerHTML) || tag === 'ol' || tag === 'ul'; const innerElm = isBlock ? parseFlow(innerHTML, options) - : parsePhrase(innerHTML, extend({}, options, { breaks: false })); + : parsePhrase(innerHTML, { ...options, breaks: false }); if (isBlock || /^\n/.test(inner)) { - elm.push('\n'); + elm.appendChild(new TextNode('\n')); } if (isBlock || /\s$/.test(inner)) { - innerElm.push('\n'); + innerElm.push(new TextNode('\n')); } - elm = elm.concat(innerElm); + elm.appendChild(innerElm); } - list.add(elm); + root.appendChild(elm); src.skipWS(); // skip tailing whitespace continue; } @@ -263,39 +290,54 @@ function parseFlow (src, options) { // ruler if ((m = reRuler.exec(src))) { + root.appendChild(new Element('hr', null, src.offset)); src.advance(m[0]); - list.add([ 'hr' ]); continue; } // list if ((m = testList(src))) { - src.advance(m[0]); - list.add(parseList(m[0], options)); + const len = m[0].length; + root.appendChild(parseList(src.sub(0, len), options)); + src.advance(len); continue; } // definition list if ((m = testDefList(src))) { - src.advance(m[0]); - list.add(parseDefList(m[0], options)); + const len = m[0].length; + root.appendChild(parseDefList(src.sub(0, len), options)); + src.advance(len); continue; } // table if ((m = testTable(src))) { - src.advance(m[0]); - list.add(parseTable(m[1], options)); + const len = m[0].length; + root.appendChild(parseTable(src.sub(0, len), options)); + src.advance(len); continue; } // paragraph m = reBlockNormal.exec(src); - list.merge(paragraph(m[1], 'p', undefined, '\n', options)); + root.appendChild(paragraph(src.sub(0, m[1].length), { options })); src.advance(m[0]); } - return linkRefs ? fixLinks(list.get(), linkRefs) : list.get(); + // apply link refs to anchor tags + if (linkRefs) { + root.visit(node => { + if (node.tagName === 'a') { + const href = node.getAttribute('href'); + if (href && linkRefs[href]) { + node.setAttribute('href', linkRefs[href]); + } + } + }); + } + + return root.children; } exports.parseFlow = parseFlow; diff --git a/src/textile/list.js b/src/textile/list.js index 6ccb374..ce0f333 100644 --- a/src/textile/list.js +++ b/src/textile/list.js @@ -1,7 +1,6 @@ /* textile list parser */ -const ribbon = require('../ribbon'); const re = require('../re'); -const merge = require('../merge'); +const { Element, TextNode } = require('../Node'); const { parseAttr } = require('./attr'); const { parsePhrase } = require('./phrase'); @@ -10,22 +9,27 @@ const { txlisthd, txlisthd2 } = require('./re_ext'); re.pattern.txlisthd = txlisthd; re.pattern.txlisthd2 = txlisthd2; const reList = re.compile(/^((?:[:txlisthd:][^\0]*?(?:\r?\n|$))+)(\s*\n|$)/, 's'); -const reItem = re.compile(/^([#*]+)([^\0]+?)(\n(?=[:txlisthd2:])|$)/, 's'); +const reItem = re.compile(/^([#*]+)([^\0]+?)(\n(?=[:txlisthd2:])|$) */, 's'); -function listPad (n) { - let s = '\n'; - while (n--) { - s += '\t'; - } - return s; -} +const listPad = n => { + return '\n' + '\t'.repeat(n); +}; function testList (src) { return reList.exec(src); } function parseList (src, options) { - src = ribbon(src.replace(/(^|\r?\n)[\t ]+/, '$1')); + + const maybeMoveAttr = node => { + if (node.attrCount === 1) { + const firstChild = node.ul.children.find(d => d.tagName === 'li'); + // const attr = Object.assign(node.ul.attr, firstChild.attr); + Object.assign(node.ul.attr, firstChild.attr); + firstChild.attr = {}; + // firstChild.attr = { _offset: attr._offset }; + } + }; const stack = []; const currIndex = {}; @@ -37,88 +41,95 @@ function parseList (src, options) { let s; while ((m = reItem.exec(src))) { - const item = [ 'li' ]; + const item = new Element('li').setPos(src.offset); const destLevel = m[1].length; - const type = (m[1].substr(-1) === '#') ? 'ol' : 'ul'; let newLi = null; - let lst; - let par; + let parent; let pba; - let r; + const inner = src.sub(destLevel, m[2].length); // list starts and continuations - if ((n = /^(_|\d+)/.exec(m[2]))) { + if ((n = /^(_|\d+)/.exec(inner))) { itemIndex = isFinite(n[1]) ? parseInt(n[1], 10) : lastIndex[destLevel] || currIndex[destLevel] || 1; - m[2] = m[2].slice(n[1].length); + inner.advance(n[1].length); + // inner = inner.slice(n[1].length); } - if ((pba = parseAttr(m[2], 'li'))) { - m[2] = m[2].slice(pba[0]); - pba = pba[1]; + const [ step, attr ] = parseAttr(inner, 'li'); + if (step) { + // inner = inner.slice(step); + inner.advance(step); + pba = attr; } // list control - if (/^\.\s*$/.test(m[2])) { - listAttr = pba || {}; + if (/^\.\s*$/.test(inner)) { + listAttr = { ...pba }; src.advance(m[0]); continue; } // create nesting until we have correct level while (stack.length < destLevel) { - // list always has an attribute object, this simplifies first-pba resolution - lst = [ type, {}, listPad(stack.length + 1), (newLi = [ 'li' ]) ]; - par = stack[stack.length - 1]; - if (par) { - par.li.push(listPad(stack.length)); - par.li.push(lst); + const listType = (m[1].substr(-1) === '#') ? 'ol' : 'ul'; + newLi = new Element('li').setPos(src.offset); + const ul = new Element(listType).setPos(src.offset); + item.setPos(src.offset); + ul.appendChild(new TextNode(listPad(stack.length + 1))); + ul.appendChild(newLi); + parent = stack[stack.length - 1]; + if (parent) { + parent.li.appendChild([ + new TextNode(listPad(stack.length)), + ul + ]); } stack.push({ - ul: lst, + ul: ul, li: newLi, // count attributes's found per list - att: 0 + attrCount: 0 }); currIndex[stack.length] = 1; } // remove nesting until we have correct level while (stack.length > destLevel) { - r = stack.pop(); - r.ul.push(listPad(stack.length)); - // lists have a predictable structure - move pba from listitem to list - if (r.att === 1 && !r.ul[3][1].substr) { - merge(r.ul[1], r.ul[3].splice(1, 1)[0]); - } + const ret = stack.pop(); + ret.ul.appendChild(new TextNode(listPad(stack.length))); + maybeMoveAttr(ret); } // parent list - par = stack[stack.length - 1]; + parent = stack[stack.length - 1]; if (itemIndex) { - par.ul[1].start = itemIndex; + parent.ul.setAttribute('start', itemIndex); currIndex[destLevel] = itemIndex; // falsy prevents this from fireing until it is set again itemIndex = 0; } if (listAttr) { // "more than 1" prevent attribute transfers on list close - par.att = 9; - merge(par.ul[1], listAttr); + parent.attrCount = 9; + parent.ul.setAttr(listAttr); listAttr = null; } if (!newLi) { - par.ul.push(listPad(stack.length), item); - par.li = item; + parent.ul.appendChild([ + new TextNode(listPad(stack.length)), + item + ]); + parent.li = item; } if (pba) { - par.li.push(pba); - par.att++; + parent.li.setAttr(pba); + parent.attrCount++; } - Array.prototype.push.apply(par.li, parsePhrase(m[2].trim(), options)); + parent.li.appendChild(parsePhrase(inner.trim(), options)); src.advance(m[0]); currIndex[destLevel] = (currIndex[destLevel] || 0) + 1; @@ -129,11 +140,8 @@ function parseList (src, options) { while (stack.length) { s = stack.pop(); - s.ul.push(listPad(stack.length)); - // lists have a predictable structure - move pba from listitem to list - if (s.att === 1 && !s.ul[3][1].substr) { - merge(s.ul[1], s.ul[3].splice(1, 1)[0]); - } + s.ul.appendChild(new TextNode(listPad(stack.length))); + maybeMoveAttr(s); } return s.ul; diff --git a/src/textile/phrase.js b/src/textile/phrase.js index b9f81e8..5e8f7df 100644 --- a/src/textile/phrase.js +++ b/src/textile/phrase.js @@ -1,12 +1,12 @@ /* textile inline parser */ - -const ribbon = require('../ribbon'); -const builder = require('../builder'); +const Ribbon = require('../Ribbon'); +const { Element, TextNode, RawNode, CommentNode } = require('../Node'); const re = require('../re'); const { parseAttr } = require('./attr'); const { parseGlyph } = require('./glyph'); -const { parseHtml, parseHtmlAttr, tokenize, singletons, testComment, testOpenTag } = require('../html'); +const { parseHtml, parseHtmlAttr, tokenize, testComment, testOpenTag } = require('../html'); +const { singletons } = require('../constants'); const { ucaps, txattr, txcite } = require('./re_ext'); re.pattern.txattr = txattr; @@ -37,11 +37,36 @@ const reLinkFenced = /^\["([^\n]+?)":((?:\[[a-z0-9]*\]|[^\]])+)\]/; const reLinkTitle = /\s*\(((?:\([^()]*\)|[^()])+)\)$/; const reFootnote = /^\[(\d+)(!?)\]/; +const getMatchRe = (tok, fence, code) => { + let mMid; + let mEnd; + if (fence === '[') { + mMid = '^(.*?)'; + mEnd = '(?:])'; + } + else if (fence === '{') { + mMid = '^(.*?)'; + mEnd = '(?:})'; + } + else { + const t1 = re.escape(tok.charAt(0)); + mMid = code + ? '^(\\S+|\\S+.*?\\S)' + : `^([^\\s${t1}]+|[^\\s${t1}].*?\\S(${t1}*))`; + mEnd = '(?=$|[\\s.,"\'!?;:()«»„“”‚‘’<>])'; + } + return re.compile(`${mMid}(?:${re.escape(tok)})${mEnd}`); +}; + function parsePhrase (src, options) { - src = ribbon(src); - const list = builder(); + // FIXME: remove this + if (!(src instanceof Ribbon)) { + src = new Ribbon(src); + // console.error([src]); + } + + const root = new Element('root'); let m; - let pba; // loop do { @@ -52,21 +77,18 @@ function parsePhrase (src, options) { src.advance(1); // skip cartridge returns } if (src.startsWith('\n')) { - src.advance(1); - if (src.startsWith(' ')) { - src.advance(1); + if (options.breaks) { + root.appendChild(new Element('br').setPos(src.offset)); } - else if (options.breaks) { - list.add([ 'br' ]); - } - list.add('\n'); + root.appendChild(new TextNode('\n')); + src.skipWS(); continue; } // inline notextile if ((m = /^==(.*?)==/.exec(src))) { src.advance(m[0]); - list.add(m[1]); + root.appendChild(new RawNode(m[1])); continue; } @@ -75,43 +97,34 @@ function parsePhrase (src, options) { const boundary = !behind || /^[\s<>.,"'?!;:()[\]%{}]$/.test(behind); // FIXME: need to test right boundary for phrases as well if ((m = rePhrase.exec(src)) && (boundary || m[1])) { + const baseAttr = {}; + const offs = src.offset; src.advance(m[0]); const tok = m[2]; const fence = m[1]; const phraseType = phraseConvert[tok]; - const code = phraseType === 'code'; + const isCode = phraseType === 'code'; - if ((pba = !code && parseAttr(src, phraseType, tok))) { - src.advance(pba[0]); - pba = pba[1]; + const [ step, attr ] = isCode ? [ 0, {} ] : parseAttr(src, phraseType, tok); + if (step) { + src.advance(step); } // FIXME: if we can't match the fence on the end, we should output fence-prefix as normal text // seek end - let mMid; - let mEnd; - if (fence === '[') { - mMid = '^(.*?)'; - mEnd = '(?:])'; - } - else if (fence === '{') { - mMid = '^(.*?)'; - mEnd = '(?:})'; - } - else { - const t1 = re.escape(tok.charAt(0)); - mMid = (code) ? '^(\\S+|\\S+.*?\\S)' - : `^([^\\s${t1}]+|[^\\s${t1}].*?\\S(${t1}*))`; - mEnd = '(?=$|[\\s.,"\'!?;:()«»„“”‚‘’<>])'; - } - const rx = re.compile(`${mMid}(${re.escape(tok)})${mEnd}`); - if ((m = rx.exec(src)) && m[1]) { - src.advance(m[0]); - if (code) { - list.add([ phraseType, m[1] ]); + let m2; + if ((m2 = getMatchRe(tok, fence, isCode).exec(src)) && m2[1]) { + // console.log(m); + if (isCode) { + root + .appendChild(new Element(phraseType, baseAttr).setPos(offs)) + .appendChild(new RawNode(m2[1])); } else { - list.add([ phraseType, pba ].concat(parsePhrase(m[1], options))); + root + .appendChild(new Element(phraseType, { ...baseAttr, ...attr }).setPos(offs)) + .appendChild(parsePhrase(src.sub(0, m2[1].length), options)); } + src.advance(m2[0]); continue; } // else @@ -120,59 +133,60 @@ function parsePhrase (src, options) { // image if ((m = reImage.exec(src)) || (m = reImageFenced.exec(src))) { - src.advance(m[0]); - - pba = m[1] && parseAttr(m[1], 'img'); - const attr = pba ? pba[1] : { src: '' }; - let img = [ 'img', attr ]; + const attr = parseAttr(m[1] || '', 'img')[1]; attr.src = m[2]; attr.alt = m[3] ? (attr.title = m[3]) : ''; - if (m[4]) { // +cite causes image to be wraped with a link (or link_ref)? // TODO: support link_ref for image cite - img = [ 'a', { href: m[4] }, img ]; + root + .appendChild(new Element('a', { href: m[4] }, src.offset)) + .appendChild(new Element('img', attr, src.offset)); } - list.add(img); + else { + root + .appendChild(new Element('img', attr, src.offset)); + } + src.advance(m[0]); continue; } // html comment if ((m = testComment(src))) { src.advance(m[0]); - list.add([ '!', m[1] ]); + root.appendChild(new CommentNode(m[1])); continue; } // html tag // TODO: this seems to have a lot of overlap with block tags... DRY? if ((m = testOpenTag(src))) { - src.advance(m[0]); const tag = m[1]; const single = m[3] || m[1] in singletons; - let element = [ tag ]; - if (m[2]) { - element.push(parseHtmlAttr(m[2])); - } + const element = new Element(tag, parseHtmlAttr(m[2])).setPos(src.offset); + src.advance(m[0]); if (single) { // single tag - list.add(element).add(src.skipWS()); + root.appendChild(element); + root.appendChild(new TextNode(src.skipWS())); continue; } else { // need terminator // gulp up the rest of this block... const reEndTag = re.compile(`^(.*?)()`, 's'); + let child = element; if ((m = reEndTag.exec(src))) { - src.advance(m[0]); if (tag === 'code') { - element.push(m[1]); + element.appendChild(new RawNode(m[1])); } else if (tag === 'notextile') { // HTML is still parsed, even though textile is not - list.merge(parseHtml(tokenize(m[1]))); - continue; + const inner = src.sub(0, m[1].length); + child = parseHtml(tokenize(inner)); } else { - element = element.concat(parsePhrase(m[1], options)); + const inner = src.sub(0, m[1].length); + element.appendChild(parsePhrase(inner, options)); } - list.add(element); + root.appendChild(child); + src.advance(m[0]); continue; } // end tag is missing, treat tag as normal text... @@ -182,63 +196,88 @@ function parsePhrase (src, options) { // footnote if ((m = reFootnote.exec(src)) && /\S/.test(behind)) { + const sup = new Element('sup', { class: 'footnote', id: 'fnr' + m[1] }).setPos(src.offset); + if (m[2] === '!') { // "!" suppresses the link + sup.appendChild(new TextNode(m[1])); + } + else { + sup + .appendChild(new Element('a', { href: '#fn' + m[1] }).setPos(src.offset)) + .appendChild(new TextNode(m[1])); + } + root.appendChild(sup); src.advance(m[0]); - list.add([ 'sup', { class: 'footnote', id: 'fnr' + m[1] }, - (m[2] === '!' ? m[1] // "!" suppresses the link - : [ 'a', { href: '#fn' + m[1] }, m[1] ]) - ]); continue; } // caps / abbr if ((m = reCaps.exec(src))) { - src.advance(m[0]); - let caps = [ 'span', { class: 'caps' }, m[1] ]; + // FIXME: possible error: should convert glyphs? + const caps = new Element('span', { class: 'caps' }).setPos(src.offset); + caps.appendChild(new TextNode(m[1])); if (m[2]) { // FIXME: use , not acronym! - caps = [ 'acronym', { title: m[2] }, caps ]; + root + .appendChild(new Element('acronym', { title: m[2] }).setPos(src.offset)) + .appendChild(caps); } - list.add(caps); + else { + root.appendChild(caps); + } + src.advance(m[0]); continue; } // links - if ((boundary && (m = reLink.exec(src))) || - (m = reLinkFenced.exec(src))) { - src.advance(m[0]); - let title = m[1].match(reLinkTitle); - let inner = (title) ? m[1].slice(0, m[1].length - title[0].length) : m[1]; - if ((pba = parseAttr(inner, 'a'))) { - inner = inner.slice(pba[0]); - pba = pba[1]; + if ((boundary && (m = reLink.exec(src))) || (m = reLinkFenced.exec(src))) { + const link = root.appendChild(new Element('a').setPos(src.offset)); + const title = reLinkTitle.exec(m[1]); + const isFenced = m[0][0] === '['; + const titleLen = title ? title[0].length : 0; + let inner = src.sub(isFenced ? 2 : 1, m[1].length - titleLen); + const [ step, attr ] = parseAttr(inner, 'a'); + if (step) { + inner.advance(step); + link.setAttr(attr); } - else { - pba = {}; + link.setAttribute('href', m[2]); + if (title && !inner.length) { + inner = src.sub((isFenced ? 2 : 1) + step, m[1].length - step); } - if (title && !inner) { - inner = title[0]; - title = ''; + else if (title) { + link.setAttribute('title', title[1]); } - pba.href = m[2]; - if (title) { pba.title = title[1]; } // links may self-reference their url via $ - if (inner === '$') { - inner = pba.href.replace(/^(https?:\/\/|ftps?:\/\/|mailto:)/, ''); + if (inner.equals('$')) { + inner = m[2].replace(/^(https?:\/\/|ftps?:\/\/|mailto:)/, ''); + link.appendChild(new RawNode(inner)); } - list.add([ 'a', pba ].concat(parsePhrase(inner.replace(/^(\.?\s*)/, ''), options))); + else { + inner.skipRe(/^(\.?\s*)/); + const content = parsePhrase(inner, options); + link.appendChild(content); + } + src.advance(m[0]); continue; } // no match, move by all "uninteresting" chars m = /([a-zA-Z0-9,.':]+|[ \f\r\t\v\xA0\u2028\u2029]+|[^\0])/.exec(src); if (m) { - list.add(m[0]); + root.appendChild(new TextNode(m[0])); } src.advance(m ? m[0].length || 1 : 1); } while (src.valueOf()); - return list.get().map(parseGlyph); + // FIXME: might be better to post process the entire tree as a last step? + // convert certain glyphs in text nodes + root.children.forEach(node => { + if (node instanceof TextNode) { + node.data = parseGlyph(node.data); + } + }); + return root.children; } exports.parsePhrase = parsePhrase; diff --git a/src/textile/table.js b/src/textile/table.js index 4fb282d..f10be49 100644 --- a/src/textile/table.js +++ b/src/textile/table.js @@ -1,21 +1,18 @@ /* textile table parser */ const re = require('../re'); -const merge = require('../merge'); -const ribbon = require('../ribbon'); - +const { Element, TextNode } = require('../Node'); const { parseAttr } = require('./attr'); const { parsePhrase } = require('./phrase'); -const { reIndent } = require('../jsonml'); - const { txattr } = require('./re_ext'); + re.pattern.txattr = txattr; const reTable = re.compile(/^((?:table[:txattr:]\.(?:\s(.+?))\s*\n)?(?:(?:[:txattr:]\.[^\n\S]*)?\|.*?\|[^\n\S]*(?:\n|$))+)([^\n\S]*\n+)?/, 's'); const reHead = /^table(_?)([^\n]*?)\.(?:[ \t](.+?))?\s*\n/; -const reRow = re.compile(/^(?:\|([~^-][:txattr:])\.\s*\n)?([:txattr:]\.[^\n\S]*)?\|(.*?)\|[^\n\S]*(\n|$)/, 's'); +const reRow = re.compile(/^((?:\|([~^-][:txattr:])\.\s*\n)?([:txattr:]\.[^\n\S]*)?\|)(.*?)\|[^\n\S]*(\n|$)/, 's'); const reCaption = /^\|=([^\n+]*)\n/; -const reColgroup = /^\|:([^\n+]*)\|[\r\t ]*\n/; +const reColgroup = /^(\|:)([^\n+]*)\|[\r\t ]*\n/; const reRowgroup = /^\|([\^\-~])([^\n+]*)\.[ \t\r]*\n/; const charToTag = { @@ -25,30 +22,38 @@ const charToTag = { }; function parseColgroup (src) { - const colgroup = [ 'colgroup', {} ]; - src.split('|') - .forEach(function (s, isCol) { - const col = (isCol) ? {} : colgroup[1]; - let d = s.trim(); - let m; - if (d) { - if ((m = /^\\(\d+)/.exec(d))) { - col.span = +m[1]; - d = d.slice(m[0].length); - } - if ((m = parseAttr(d, 'col'))) { - merge(col, m[1]); - d = d.slice(m[0]); - } - if ((m = /\b\d+\b/.exec(d))) { - col.width = +m[0]; - } + const colgroup = new Element('colgroup', {}, src.offset); + src.splitBy(/\|/, (bit, isCol) => { + const col = isCol ? {} : colgroup.attr; + const pos = bit.offset; + let d = String(bit).trim(); + let m; + if (d) { + const m1 = m = /^\\(\d+)/.exec(d); + if (m1) { + col.span = +m1[1]; + d = d.slice(m1[0].length); } - if (isCol) { - colgroup.push('\n\t\t', [ 'col', col ]); + + const [ step, attr ] = parseAttr(d, 'col'); + if (step) { + Object.assign(col, attr); + d = d.slice(step); } - }); - return colgroup.concat([ '\n\t' ]); + + const m2 = m = /\b\d+\b/.exec(d); + if (m2) { + col.width = +m[0]; + } + } + if (isCol) { + colgroup.appendChild(new TextNode('\n\t\t')); + colgroup.appendChild(new Element('col', col, pos)); + } + }); + + colgroup.appendChild(new TextNode('\n\t')); + return colgroup; } function testTable (src) { @@ -56,59 +61,52 @@ function testTable (src) { } function parseTable (src, options) { - src = ribbon(src.trim()); - const rowgroups = []; let colgroup; let caption; - const tAttr = {}; - let tCurr; - let row; - let inner; - let pba; - let more; + const table = new Element('table', null, src.offset); + let currentTBody; let m; let extended = 0; - const setRowGroup = function (type, pba) { - tCurr = [ type, pba || {} ]; - rowgroups.push(tCurr); + const setRowGroup = (type, attr, pos) => { + currentTBody = new Element(type, attr, pos); + rowgroups.push(currentTBody); }; if ((m = reHead.exec(src))) { // parse and apply table attr - src.advance(m[0]); - pba = parseAttr(m[2], 'table'); - if (pba) { - merge(tAttr, pba[1]); - } + const [ , attr ] = parseAttr(m[2], 'table'); + table.setAttr(attr); if (m[3]) { - tAttr.summary = m[3]; + table.setAttribute('summary', m[3]); } + src.advance(m[0]); } // caption if ((m = reCaption.exec(src))) { - caption = [ 'caption' ]; - if ((pba = parseAttr(m[1], 'caption'))) { - caption.push(pba[1]); - m[1] = m[1].slice(pba[0]); + const [ step, attr ] = parseAttr(m[1], 'caption'); + let innerCaption = m[1]; + if (step) { + innerCaption = innerCaption.slice(step); } - if (/\./.test(m[1])) { // mandatory "." - caption.push(m[1].slice(1).replace(/\|\s*$/, '').trim()); + if (/\./.test(innerCaption)) { // mandatory "." + // FIXME: possible bug: missing glyph transforms? + const captionText = innerCaption.slice(1).replace(/\|\s*$/, '').trim(); + caption = new Element('caption', attr, src.offset); + caption.appendChild(new TextNode(captionText)); extended++; src.advance(m[0]); } - else { - caption = null; - } } do { // colgroup if ((m = reColgroup.exec(src))) { - colgroup = parseColgroup(m[1]); + colgroup = parseColgroup(src.sub(m[1].length, m[2].length)); extended++; + src.advance(m[0]); } // "rowgroup" (tbody, thead, tfoot) else if ((m = reRowgroup.exec(src))) { @@ -116,86 +114,96 @@ function parseTable (src, options) { // and simply translates them straight through // the same is done here. const tag = charToTag[m[1]] || 'tbody'; - pba = parseAttr(`${m[2]} `, tag); - setRowGroup(tag, pba && pba[1]); + const [ , attr ] = parseAttr(`${m[2]} `, tag); + setRowGroup(tag, attr, src.offset); extended++; + src.advance(m[0]); } // row else if ((m = reRow.exec(src))) { - if (!tCurr) { setRowGroup('tbody'); } - - row = [ 'tr' ]; - - if (m[2] && (pba = parseAttr(m[2], 'tr'))) { - // FIXME: requires "\.\s?" -- else what ? - row.push(pba[1]); + const rowPos = src.offset; + if (!currentTBody) { + setRowGroup('tbody', null, rowPos); } - tCurr.push('\n\t\t', row); - inner = ribbon(m[3]); + const attr = parseAttr(m[3], 'tr')[1]; // FIXME: requires "\.\s?" -- else what ? + const row = new Element('tr', attr, rowPos); + currentTBody.appendChild(new TextNode('\n\t\t')); + currentTBody.appendChild(row); + const inner = src.sub(m[1].length, m[4].length); + let isMore; + let cellNum = 0; do { inner.save(); + row.appendChild(new TextNode('\n\t\t\t')); + + const cellPos = cellNum ? inner.offset - 1 : rowPos; // cell loop - const th = inner.startsWith('_'); - let cell = [ th ? 'th' : 'td' ]; - if (th) { + const isTh = inner.startsWith('_'); + if (isTh) { inner.advance(1); } - pba = parseAttr(inner, 'td'); - if (pba) { - inner.advance(pba[0]); - cell.push(pba[1]); // FIXME: don't do this if next text fails - } + const [ step, attr ] = parseAttr(inner, 'td'); + inner.advance(step); - if (pba || th) { + let cell = new Element(isTh ? 'th' : 'td', attr, cellPos); + + if (step || isTh) { const p = /^\.\s*/.exec(inner); if (p) { inner.advance(p[0]); } else { - cell = [ 'td' ]; + cell = new Element('td'); inner.load(); } } const mx = /^(==.*?==|[^|])*/.exec(inner); - cell = cell.concat(parsePhrase(mx[0], options)); - row.push('\n\t\t\t', cell); - more = inner.valueOf().charAt(mx[0].length) === '|'; - inner.advance(mx[0].length + 1); + const contentLength = mx[0].length; + cell.appendChild(parsePhrase(inner.sub(0, contentLength), options)); + + row.appendChild(cell); + + isMore = inner.charAt(contentLength) === '|'; + inner.advance(contentLength + 1); + + cellNum++; } - while (more); + while (isMore); - row.push('\n\t\t'); - } - // - if (m) { + row.appendChild(new TextNode('\n\t\t')); src.advance(m[0]); } } while (m); // assemble table - let table = [ 'table', tAttr ]; if (extended) { if (caption) { - table.push('\n\t', caption); + table.appendChild(new TextNode('\n\t')); + table.appendChild(caption); } if (colgroup) { - table.push('\n\t', colgroup); + table.appendChild(new TextNode('\n\t')); + table.appendChild(colgroup); } - rowgroups.forEach(function (tbody) { - table.push('\n\t', tbody.concat([ '\n\t' ])); + rowgroups.forEach(tbody => { + table.appendChild(new TextNode('\n\t')); + table + .appendChild(tbody) + .appendChild(new TextNode('\n\t')); }); } else { - table = table.concat(reIndent(rowgroups[0].slice(2), -1)); + table.appendChild(rowgroups[0].children); + table.reIndent(-1); } - table.push('\n'); + table.appendChild(new TextNode('\n')); return table; } diff --git a/test/line-numbers.js b/test/line-numbers.js new file mode 100644 index 0000000..1e5cec0 --- /dev/null +++ b/test/line-numbers.js @@ -0,0 +1,118 @@ +const test = require('tape'); +const textile = require('../src'); + +function parse (tx) { + return textile + .parseTree(tx) + .visit(node => { + if (node.nodeType === 1) { + node.setAttribute('data-line', node.pos.line + 1); + } + }) + .toHTML(); +} + +test('paragraph', t => { + t.is( + parse('one\n\ntwo'), + '

    one

    \n

    two

    ' + ); + t.is( + parse('p. one\n\np. two'), + '

    one

    \n

    two

    ' + ); + t.is( + parse('p.. one\n\ntwo'), + '

    one

    \n

    two

    ' + ); + t.end(); +}); + +test('h1', t => { + t.is( + parse('one\n\nh1. two'), + '

    one

    \n

    two

    ' + ); + t.is( + parse('h1. one\n\nh1. two'), + '

    one

    \n

    two

    ' + ); + t.is( + parse('h1.. one\n\ntwo'), + '

    one

    \n

    two

    ' + ); + t.end(); +}); + +test('h2', t => { + t.is( + parse('one\n\nh2. two'), + '

    one

    \n

    two

    ' + ); + t.is( + parse('h2. one\n\nh2. two'), + '

    one

    \n

    two

    ' + ); + t.is( + parse('h2.. one\n\ntwo'), + '

    one

    \n

    two

    ' + ); + t.end(); +}); + +test('bc', t => { + t.is( + parse('one\n\nbc. two'), + '

    one

    \n
    two
    ' + ); + t.is( + parse('bc. one\n\nbc. two'), + '
    one
    \n
    two
    ' + ); + t.is( + parse('bc.. one\n\ntwo'), + '
    one\n\ntwo
    ' + ); + t.is( + parse('one\n\nbc.. one\n\ntwo'), + '

    one

    \n
    one\n\ntwo
    ' + ); + t.end(); +}); + +test('paragraph', t => { + t.is( + parse('one\n\nnotextile. two'), + '

    one

    \ntwo' + ); + t.is( + parse('notextile. one\n\nnotextile. two'), + 'one\ntwo' + ); + t.is( + parse('notextile.. one\n\ntwo'), + 'one\n\ntwo' + ); + t.end(); +}); + + +test('pre', t => { + t.is( + parse('one\n\npre. two'), + '

    one

    \n
    two
    ' + ); + t.is( + parse('pre. one\n\npre. two'), + '
    one
    \n
    two
    ' + ); + t.is( + parse('pre.. one\n\ntwo'), + '
    one\n\ntwo
    ' + ); + t.is( + parse('one\n\npre.. one\n\ntwo'), + '

    one

    \n
    one\n\ntwo
    ' + ); + t.end(); +}); diff --git a/test/source-offsets.js b/test/source-offsets.js new file mode 100644 index 0000000..a7dbbfd --- /dev/null +++ b/test/source-offsets.js @@ -0,0 +1,29 @@ +const test = require('tape'); +const textile = require('../src'); + +function simplify (node) { + const tag = node.tagName || 'ROOT'; + let children = node.children && node.children.filter(d => d.nodeType === 1); + if (children && children.length) { + children = children.map(simplify); + return [ tag, node.pos.offset, children ]; + } + return [ tag, node.pos.offset ]; +} + +function parse (tx) { + const tree = textile.parseTree(tx); + return simplify(tree); +} + +test('paragraph', t => { + t.deepEqual( + parse('one\n\ntwo'), + [ 'ROOT', 0, [ [ 'p', 0 ], [ 'p', 5 ] ] ] + ); + t.deepEqual( + parse('p. one\n\np. two'), + [ 'ROOT', 0, [ [ 'p', 0 ], [ 'p', 8 ] ] ] + ); + t.end(); +}); diff --git a/webpack.config.js b/webpack.config.js index f9fb72c..09681b2 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -26,6 +26,8 @@ module.exports = { loader: 'babel-loader', options: { presets: [ [ '@babel/preset-env', { + loose: true, + // useBuiltIns: 'usage', targets: { browsers: [ '>0.25%', 'not op_mini all' From e581bb8f468532c9bdf92a5b788a1bbaec8302e0 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sun, 14 Mar 2021 22:40:06 +0000 Subject: [PATCH 02/35] Use ABBR since ACRONYM is deprecated --- src/textile/phrase.js | 3 +-- test/basic.js | 4 ++-- test/threshold.js | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/textile/phrase.js b/src/textile/phrase.js index 5e8f7df..1314080 100644 --- a/src/textile/phrase.js +++ b/src/textile/phrase.js @@ -216,9 +216,8 @@ function parsePhrase (src, options) { const caps = new Element('span', { class: 'caps' }).setPos(src.offset); caps.appendChild(new TextNode(m[1])); if (m[2]) { - // FIXME: use , not acronym! root - .appendChild(new Element('acronym', { title: m[2] }).setPos(src.offset)) + .appendChild(new Element('abbr', { title: m[2] }).setPos(src.offset)) .appendChild(caps); } else { diff --git a/test/basic.js b/test/basic.js index 2348c7b..9095517 100644 --- a/test/basic.js +++ b/test/basic.js @@ -760,7 +760,7 @@ machine and paid it to sing to them.

    ', tx); test('acronym definitions', function (t) { const tx = 'We use CSS(Cascading Style Sheets).'; t.is(textile.convert(tx), - '

    We use CSS.

    ', tx); + '

    We use CSS.

    ', tx); t.end(); }); @@ -768,7 +768,7 @@ test('acronym definitions', function (t) { test('two-letter acronyms', function (t) { const tx = 'It employs AI(artificial intelligence) processing.'; t.is(textile.convert(tx), - '

    It employs AI processing.

    ', tx); + '

    It employs AI processing.

    ', tx); t.end(); }); diff --git a/test/threshold.js b/test/threshold.js index cb97b4f..1b20df8 100644 --- a/test/threshold.js +++ b/test/threshold.js @@ -137,7 +137,7 @@ test('trademark register copyright', function (t) { test('acronyms', function (t) { const tx = 'ABC(Always Be Closing)'; t.is(textile.convert(tx), - '

    ABC

    ', tx); + '

    ABC

    ', tx); t.end(); }); From 9e25f355bc8426fdd239672d4860d6f102fbfbf9 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sun, 14 Mar 2021 22:52:04 +0000 Subject: [PATCH 03/35] Added tests --- test/jstextile.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/jstextile.js b/test/jstextile.js index 036163d..ffc8002 100644 --- a/test/jstextile.js +++ b/test/jstextile.js @@ -685,3 +685,17 @@ test('prefixed links (#60)', function (t) { '

    user %user@example.com

    '); t.end(); }); + + +test('link alias work in HTML tags', function (t) { + t.is(textile.convert('link1 "link2":foo\n\n[foo]http://example.com'), + '

    link1 link2

    '); + t.end(); +}); + + +test('correct glyph convertion', function (t) { + t.is(textile.convert('p. foo -- bar _foo ==foo -- bar== bar_ @foo -- bar@\n\nnotextile. foo -- bar'), + '

    foo — bar foo foo -- bar bar foo -- bar

    \nfoo -- bar'); + t.end(); +}); From 5317edeef9c58819c575a91bdda391c31cb2f221 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sun, 28 Mar 2021 14:54:36 +0000 Subject: [PATCH 04/35] Modernized the code Code now uses ESM import/export syntax. The package has not been set to type module as tape does not support that yet. The project is ready to be switched over but I am happy to wait for support in the test runner for now. I have also cleaned up the tests so they now use template strings for multiline strings and arrow callback functions. Moved babel config and browserlist to rc files. --- .babelrc | 10 + .browserslistrc | 4 + package-lock.json | 3296 ++++++++++++++++++++++++++------------ package.json | 27 +- src/Node.js | 21 +- src/constants.js | 2 +- src/html.js | 32 +- src/index.js | 26 +- src/merge.js | 9 - src/re.js | 4 +- src/ribbon.js | 2 +- src/textile/attr.js | 9 +- src/textile/deflist.js | 15 +- src/textile/flow.js | 26 +- src/textile/glyph.js | 5 +- src/textile/list.js | 20 +- src/textile/phrase.js | 20 +- src/textile/re_ext.js | 23 +- src/textile/table.js | 22 +- test/.eslintrc | 8 - test/basic.js | 1149 ++++++------- test/block_comments.js | 69 +- test/blocks-and-html.js | 8 +- test/definitions.js | 133 +- test/extra_whitespace.js | 50 +- test/filter_pba.js | 8 +- test/html.js | 231 +-- test/images.js | 152 +- test/instiki.js | 45 +- test/jstextile.js | 132 +- test/line-numbers.js | 7 +- test/linebreaks.js | 697 ++++---- test/links.js | 191 +-- test/lists.js | 756 ++++----- test/options.js | 10 +- test/poignant.js | 114 +- test/source-offsets.js | 6 +- test/table.js | 700 ++++---- test/tables-extended.js | 838 +++++----- test/textism.js | 385 ++--- test/threshold.js | 728 +++++---- webpack.config.js | 13 +- 42 files changed, 5653 insertions(+), 4350 deletions(-) create mode 100644 .babelrc create mode 100644 .browserslistrc delete mode 100644 src/merge.js delete mode 100644 test/.eslintrc diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..545a18a --- /dev/null +++ b/.babelrc @@ -0,0 +1,10 @@ +{ + "presets": [ + [ + "@babel/preset-env", { + loose: true, + } + ] + ] +} + diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..c86dca6 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,4 @@ +>0.25% +not ie 11 +not dead +not op_mini all diff --git a/package-lock.json b/package-lock.json index 1cb6ea0..9b41642 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,29 +14,24 @@ } }, "@babel/compat-data": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.5.tgz", - "integrity": "sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg==", - "dev": true, - "requires": { - "browserslist": "^4.8.5", - "invariant": "^2.2.4", - "semver": "^5.5.0" - } + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", + "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", + "dev": true }, "@babel/core": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz", - "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", + "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", + "@babel/generator": "^7.8.7", "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.4", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/parser": "^7.8.7", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -45,176 +40,512 @@ "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + } + } + }, + "@babel/traverse": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.13", + "@babel/types": "^7.13.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + } + } + }, + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-annotate-as-pure": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", - "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", - "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-call-delegate": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz", - "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-compilation-targets": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz", - "integrity": "sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg==", + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", + "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.8.4", - "browserslist": "^4.8.5", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz", - "integrity": "sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3" + "@babel/compat-data": "^7.13.12", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz", - "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==", + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", "dev": true, "requires": { - "@babel/helper-regex": "^7.8.3", - "regexpu-core": "^4.6.0" - } - }, - "@babel/helper-define-map": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", - "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/types": "^7.8.3", - "lodash": "^4.17.13" + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", - "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", - "dev": true, - "requires": { - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.13.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-hoist-variables": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", - "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", - "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", + "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.13", + "@babel/types": "^7.13.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.13.12" + }, + "dependencies": { + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-module-transforms": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz", - "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-simple-access": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3", - "lodash": "^4.17.13" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", - "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz", + "integrity": "sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.13", + "@babel/types": "^7.13.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-plugin-utils": { @@ -223,80 +554,319 @@ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", "dev": true }, - "@babel/helper-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", - "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", - "dev": true, - "requires": { - "lodash": "^4.17.13" - } - }, "@babel/helper-remap-async-to-generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", - "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-wrap-function": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-replace-supers": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz", - "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-simple-access": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", - "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, "requires": { - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/types": "^7.13.12" + }, + "dependencies": { + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, "@babel/helper-wrap-function": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", - "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.13", + "@babel/types": "^7.13.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", + "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", "dev": true, "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.13", + "@babel/types": "^7.13.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/highlight": { @@ -310,111 +880,153 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", - "dev": true - }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", - "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", + "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-remap-async-to-generator": "^7.8.3", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", - "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", - "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.8.3.tgz", - "integrity": "sha512-PYtv2S2OdCdp7GSPDg5ndGZFm9DmWFvuLoS5nBxZCgOBggluLnhTScspJxng96alHQzPyrrHxvC9/w4bFuspeA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-export-default-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-proposal-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", - "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz", - "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-syntax-async-generators": { @@ -435,15 +1047,6 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.8.3.tgz", - "integrity": "sha512-a1qnnsr73KLNIQcQlcQ4ZHxqqfBKM6iNQZW2OMTyxNbA2WC7SHWHtGVpFzWtQAuS2pspkWVzdEBXXx8Ik0Za4w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -490,339 +1093,901 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", - "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", - "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", - "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-remap-async-to-generator": "^7.8.3" + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", - "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-block-scoping": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", - "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", + "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "lodash": "^4.17.13" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-classes": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz", - "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-define-map": "^7.8.3", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.13", + "@babel/types": "^7.13.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-computed-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", - "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-destructuring": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz", - "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", + "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", - "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", - "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", - "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-for-of": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz", - "integrity": "sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", - "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", - "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", - "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", + "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", + "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-simple-access": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", + "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", - "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.12.13" } }, "@babel/plugin-transform-new-target": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", - "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-object-super": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", - "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.13", + "@babel/types": "^7.13.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-parameters": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz", - "integrity": "sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.8.3", - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-property-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", - "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-regenerator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz", - "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", + "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", "dev": true, "requires": { - "regenerator-transform": "^0.14.0" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", - "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", - "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", - "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", - "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-regex": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-template-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", - "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", - "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", - "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/polyfill": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.8.3.tgz", - "integrity": "sha512-0QEgn2zkCzqGIkSWWAEmvxD7e00Nm9asTtQvi7HdlYvMhjy/J38V/1Y9ode0zEJeIuxAI0uftiAzqc7nVeWUGg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", "dev": true, "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + } } }, "@babel/preset-env": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz", - "integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", + "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", "dev": true, "requires": { - "@babel/compat-data": "^7.8.4", - "@babel/helper-compilation-targets": "^7.8.4", + "@babel/compat-data": "^7.8.6", + "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-proposal-async-generator-functions": "^7.8.3", @@ -845,13 +2010,13 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.3", + "@babel/plugin-transform-classes": "^7.8.6", "@babel/plugin-transform-computed-properties": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.8.3", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.4", + "@babel/plugin-transform-for-of": "^7.8.6", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", @@ -862,9 +2027,9 @@ "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.4", + "@babel/plugin-transform-parameters": "^7.8.7", "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", "@babel/plugin-transform-reserved-words": "^7.8.3", "@babel/plugin-transform-shorthand-properties": "^7.8.3", "@babel/plugin-transform-spread": "^7.8.3", @@ -872,91 +2037,47 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.3", + "@babel/types": "^7.8.7", "browserslist": "^4.8.5", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" - } - }, - "@babel/register": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.8.3.tgz", - "integrity": "sha512-t7UqebaWwo9nXWClIPLPloa5pN33A2leVs8Hf0e9g9YwUP8/H9NeR7DJU+4CXo23QtjChQv5a3DjEtT83ih1rg==", - "dev": true, - "requires": { - "find-cache-dir": "^2.0.0", - "lodash": "^4.17.13", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "@babel/runtime": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", - "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, - "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "@babel/register": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.8.6.tgz", + "integrity": "sha512-7IDO93fuRsbyml7bAafBQb3RcBGlCpU4hh5wADA2LJEEcYk92WkwFZ0pHyIi2fb5Auoz1714abETdZKCOxN0CQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" + "find-cache-dir": "^2.0.0", + "lodash": "^4.17.13", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" } }, - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "@babel/runtime": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", + "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" + "regenerator-runtime": "^0.13.2" } }, "@borgar/eslint-config": { @@ -966,13 +2087,14 @@ "dev": true }, "@istanbuljs/load-nyc-config": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz", - "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { "camelcase": "^5.3.1", "find-up": "^4.1.0", + "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" }, @@ -1020,15 +2142,9 @@ } }, "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@types/json-schema": { @@ -1274,9 +2390,9 @@ "dev": true }, "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, "ansi-escapes": { @@ -1371,93 +2487,16 @@ "dev": true }, "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", "is-string": "^1.0.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - } } }, "array-unique": { @@ -1467,103 +2506,34 @@ "dev": true }, "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - } + "es-abstract": "^1.18.0-next.1" } }, "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "assert": { @@ -1631,9 +2601,9 @@ } }, "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { "object.assign": "^4.1.0" @@ -1701,9 +2671,9 @@ } }, "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "big.js": { @@ -1736,9 +2706,9 @@ "dev": true }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, "brace-expansion": { @@ -1824,28 +2794,49 @@ } }, "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { - "bn.js": "^4.1.0", + "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "browserify-zlib": { @@ -1858,14 +2849,16 @@ } }, "browserslist": { - "version": "4.8.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.6.tgz", - "integrity": "sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg==", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001023", - "electron-to-chromium": "^1.3.341", - "node-releases": "^1.1.47" + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" } }, "buffer": { @@ -1979,9 +2972,9 @@ }, "dependencies": { "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" @@ -1992,21 +2985,19 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "write-file-atomic": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", - "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } } } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2020,9 +3011,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001025", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001025.tgz", - "integrity": "sha512-SKyFdHYfXUZf5V85+PJgLYyit27q4wgvZuf8QTOk1osbypcROihMBlx9GRar2/pIcKH2r4OehdlBr9x6PXetAQ==", + "version": "1.0.30001204", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz", + "integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==", "dev": true }, "chalk": { @@ -2205,6 +3196,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -2288,19 +3285,13 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, - "core-js": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", - "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==", - "dev": true - }, "core-js-compat": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", - "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz", + "integrity": "sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==", "dev": true, "requires": { - "browserslist": "^4.8.3", + "browserslist": "^4.16.3", "semver": "7.0.0" }, "dependencies": { @@ -2319,13 +3310,21 @@ "dev": true }, "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "create-hash": { @@ -2532,6 +3531,14 @@ "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "doctrine": { @@ -2577,24 +3584,32 @@ } }, "electron-to-chromium": { - "version": "1.3.345", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.345.tgz", - "integrity": "sha512-f8nx53+Z9Y+SPWGg3YdHrbYYfIJAtbUjpFfW4X1RwTZ94iUG7geg9tV8HqzAXX7XTNgyWgAFvce4yce8ZKxKmg==", + "version": "1.3.701", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.701.tgz", + "integrity": "sha512-Zd9ofdIMYHYhG1gvnejQDvC/kqSeXQvtXF0yRURGxgwGqDZm9F9Fm3dYFnm5gyuA7xpXfBlzVLN1sz0FjxpKfw==", "dev": true }, "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "emoji-regex": { @@ -2660,27 +3675,69 @@ } }, "es-abstract": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", - "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -2694,6 +3751,12 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2769,9 +3832,9 @@ } }, "eslint-import-resolver-node": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", - "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, "requires": { "debug": "^2.6.9", @@ -2792,22 +3855,13 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "resolve": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", - "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } } } }, "eslint-module-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", - "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "dev": true, "requires": { "debug": "^2.6.9", @@ -2884,9 +3938,9 @@ } }, "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", + "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", "dev": true, "requires": { "array-includes": "^3.0.3", @@ -3003,9 +4057,9 @@ "dev": true }, "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "events-to-array": { @@ -3337,9 +4391,9 @@ }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -3399,9 +4453,9 @@ } }, "fromentries": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz", - "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true }, "fs-minipass": { @@ -3468,9 +4522,9 @@ "dev": true }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-caller-file": { @@ -3479,6 +4533,31 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -3564,6 +4643,12 @@ "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3609,13 +4694,33 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "hash.js": { @@ -3629,27 +4734,13 @@ } }, "hasha": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.1.0.tgz", - "integrity": "sha512-OFPDWmzPN1l7atOV1TgBVmNtBxaIysToK6Ve9DK+vT6pYuklw/nPNT+HJbZi0KDcI6vWB+9tgvZ5YD7fA3CXcA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "requires": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } } }, "hirestime": { @@ -3679,15 +4770,15 @@ } }, "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, "html-escaper": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", - "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "https-browserify": { @@ -3706,9 +4797,9 @@ } }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "iferr": { @@ -3911,6 +5002,12 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3921,6 +5018,15 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -3933,6 +5039,15 @@ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -4005,6 +5120,12 @@ "is-extglob": "^2.1.1" } }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -4025,6 +5146,12 @@ } } }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -4049,6 +5176,12 @@ "has": "^1.0.1" } }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, "is-string": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", @@ -4116,15 +5249,12 @@ } }, "istanbul-lib-instrument": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz", - "integrity": "sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { "@babel/core": "^7.7.5", - "@babel/parser": "^7.7.5", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" @@ -4154,9 +5284,9 @@ }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -4165,9 +5295,9 @@ } }, "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" @@ -4180,9 +5310,9 @@ "dev": true }, "rimraf": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.1.tgz", - "integrity": "sha512-IQ4ikL8SjBiEDZfk+DFVwqRK8md24RWMEJkdSlgNLkyyAImcjf8SWvU1qFMDOb4igBClbTQ/ugPqXcRwdFTxZw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -4238,9 +5368,9 @@ "dev": true }, "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" @@ -4253,9 +5383,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -4283,9 +5413,9 @@ } }, "istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-2osTcC8zcOSUkImzN2EWQta3Vdi4WjjKw99P2yWx5mLnigAM0Rd5uYFn1cf2i/Ois45GkNjaoTqc5CxgMSX80A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -4360,12 +5490,12 @@ "dev": true }, "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "kind-of": { @@ -4574,6 +5704,14 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "minimalistic-assert": { @@ -4766,9 +5904,9 @@ "dev": true }, "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "dev": true, "optional": true }, @@ -4798,9 +5936,9 @@ "dev": true }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "nice-try": { @@ -4864,21 +6002,10 @@ } }, "node-releases": { - "version": "1.1.47", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.47.tgz", - "integrity": "sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true }, "normalize-package-data": { "version": "2.5.0", @@ -4900,9 +6027,9 @@ "optional": true }, "nyc": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.0.0.tgz", - "integrity": "sha512-qcLBlNCKMDVuKb7d1fpxjPR8sHeMVX0CHarXAVzrVWoFrigCkYR8xcrjfXSPi5HXM7EU78L6ywO7w1c5rZNCNg==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.0.1.tgz", + "integrity": "sha512-n0MBXYBYRqa67IVt62qW1r/d9UH/Qtr7SF1w/nQLJ9KxvWF6b2xCHImRAixHN9tnMMYHC2P14uo6KddNGwMgGg==", "dev": true, "requires": { "@istanbuljs/load-nyc-config": "^1.0.0", @@ -4920,10 +6047,9 @@ "istanbul-lib-processinfo": "^2.0.2", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "js-yaml": "^3.13.1", + "istanbul-reports": "^3.0.2", "make-dir": "^3.0.0", - "node-preload": "^0.2.0", + "node-preload": "^0.2.1", "p-map": "^3.0.0", "process-on-spawn": "^1.0.0", "resolve-from": "^5.0.0", @@ -4931,24 +6057,17 @@ "signal-exit": "^3.0.2", "spawn-wrap": "^2.0.0", "test-exclude": "^6.0.0", - "uuid": "^3.3.3", "yargs": "^15.0.2" }, "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, "find-cache-dir": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", - "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^3.0.0", + "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, @@ -4986,9 +6105,9 @@ } }, "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" @@ -5025,9 +6144,9 @@ "dev": true }, "rimraf": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.1.tgz", - "integrity": "sha512-IQ4ikL8SjBiEDZfk+DFVwqRK8md24RWMEJkdSlgNLkyyAImcjf8SWvU1qFMDOb4igBClbTQ/ugPqXcRwdFTxZw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -5079,9 +6198,9 @@ } }, "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, "object-is": { @@ -5127,14 +6246,14 @@ } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", + "es-abstract": "^1.18.0-next.2", "has": "^1.0.3" } }, @@ -5245,14 +6364,13 @@ } }, "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "asn1.js": "^4.0.0", + "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" @@ -5340,9 +6458,9 @@ } }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -5404,12 +6522,6 @@ "parse-ms": "^2.0.0" } }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -5461,6 +6573,14 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "pump": { @@ -5625,15 +6745,15 @@ } }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "requires": { "regenerate": "^1.4.0" @@ -5646,12 +6766,12 @@ "dev": true }, "regenerator-transform": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", - "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4" } }, "regex-not": { @@ -5760,29 +6880,29 @@ "dev": true }, "regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", - "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "regjsparser": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", - "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -5837,11 +6957,12 @@ "dev": true }, "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -5949,7 +7070,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -5979,6 +7100,15 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -6242,18 +7372,18 @@ }, "dependencies": { "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" } }, "rimraf": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.1.tgz", - "integrity": "sha512-IQ4ikL8SjBiEDZfk+DFVwqRK8md24RWMEJkdSlgNLkyyAImcjf8SWvU1qFMDOb4igBClbTQ/ugPqXcRwdFTxZw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -6277,9 +7407,9 @@ } }, "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -6287,15 +7417,15 @@ } }, "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -6303,9 +7433,9 @@ } }, "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", "dev": true }, "split-string": { @@ -6411,9 +7541,9 @@ "dev": true }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -6534,24 +7664,24 @@ } } }, - "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string_decoder": { @@ -6680,9 +7810,9 @@ "dev": true }, "tape": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.0.tgz", - "integrity": "sha512-J/hvA+GJnuWJ0Sj8Z0dmu3JgMNU+MmusvkCT7+SN4/2TklW18FNCp/UuHIEhPZwHfy4sXfKYgC7kypKg4umbOw==", + "version": "4.13.3", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.3.tgz", + "integrity": "sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw==", "dev": true, "requires": { "deep-equal": "~1.1.1", @@ -6694,9 +7824,9 @@ "has": "~1.0.3", "inherits": "~2.0.4", "is-regex": "~1.0.5", - "minimist": "~1.2.0", + "minimist": "~1.2.5", "object-inspect": "~1.7.0", - "resolve": "~1.14.2", + "resolve": "~1.17.0", "resumer": "~0.0.0", "string.prototype.trim": "~1.2.1", "through": "~2.3.8" @@ -6732,9 +7862,9 @@ "dev": true }, "resolve": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", - "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -6927,7 +8057,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -6942,9 +8072,9 @@ } }, "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -7034,6 +8164,12 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -7049,6 +8185,26 @@ "is-typedarray": "^1.0.0" } }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -7066,15 +8222,15 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, "union-value": { @@ -7217,9 +8373,9 @@ "dev": true }, "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, "v8-compile-cache": { @@ -7245,21 +8401,21 @@ "dev": true }, "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "requires": { "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" + "watchpack-chokidar2": "^2.0.1" } }, "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, "optional": true, "requires": { @@ -7376,9 +8532,9 @@ } }, "webpack": { - "version": "4.41.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz", - "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==", + "version": "4.41.6", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz", + "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.8.5", @@ -7407,9 +8563,9 @@ }, "dependencies": { "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "cacache": { @@ -7445,15 +8601,6 @@ "estraverse": "^4.1.1" } }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7669,6 +8816,36 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -7702,12 +8879,11 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -7752,6 +8928,18 @@ "mkdirp": "^0.5.1" } }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index a5b06df..9740ed3 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,10 @@ "scripts": { "build": "webpack --mode production", "start": "webpack --mode development --watch", - "dev": "nodemon -w test -w src -x 'tape 'test/*.js'|tap-min'", - "test": "tape test/*js | tap-min", + "dev": "nodemon -w test -w src -x 'tape -r @babel/register 'test/*.js'|tap-min'", + "test": "tape -r @babel/register 'test/*js' | tap-min", "lint": "eslint src/*js test/*js", - "coverage": "nyc --reporter html --reporter text tape test/*js", + "coverage": "nyc --reporter html --reporter text tape -r @babel/register test/*js", "pub": "node scripts/publish.js", "dingus": "node scripts/updatedingus.js" }, @@ -21,6 +21,10 @@ "bugs": { "url": "http://github.com/borgar/textile-js/issues" }, + "funding": { + "type" : "individual", + "url" : "https://ko-fi.com/borgar" + }, "keywords": [ "textile", "markup", @@ -33,21 +37,18 @@ ], "license": "MIT", "devDependencies": { - "@babel/core": "~7.8.4", - "@babel/plugin-proposal-class-properties": "~7.8.3", - "@babel/plugin-proposal-export-default-from": "~7.8.3", - "@babel/polyfill": "~7.8.3", - "@babel/preset-env": "~7.8.4", - "@babel/register": "~7.8.3", + "@babel/core": "~7.8.7", + "@babel/preset-env": "~7.8.7", + "@babel/register": "~7.8.6", "@borgar/eslint-config": "~1.1.0", "babel-loader": "~8.0.6", "eslint": "~6.8.0", - "eslint-plugin-import": "~2.20.1", - "nyc": "~15.0.0", - "tape": "~4.13.0", + "eslint-plugin-import": "~2.20.2", + "nyc": "~15.0.1", "tap-min": "~2.0.0", + "tape": "~4.13.3", "terser-webpack-plugin": "~2.3.6", - "webpack": "~4.41.5", + "webpack": "~4.41.6", "webpack-cli": "~3.3.12" } } diff --git a/src/Node.js b/src/Node.js index d453bd2..970d090 100644 --- a/src/Node.js +++ b/src/Node.js @@ -1,4 +1,4 @@ -const { singletons } = require('./constants'); +import { singletons } from './constants.js'; const NODE = 0; const ELEMENT_NODE = 1; @@ -46,7 +46,7 @@ function appendTo (parent, child) { return child; } -class Node { +export class Node { constructor (tagName) { this.nodeType = NODE; this.pos = { offset: null }; @@ -81,7 +81,7 @@ class Node { } }; -class TextNode extends Node { +export class TextNode extends Node { constructor (data) { super(); this.nodeType = TEXT_NODE; @@ -95,7 +95,7 @@ class TextNode extends Node { // Essentially this is the same as a textnode except it should not // merge with textnodes, and should not be post-processed. -class RawNode extends Node { +export class RawNode extends Node { constructor (data) { super(); this.nodeType = RAW_NODE; @@ -107,7 +107,7 @@ class RawNode extends Node { } } -class CommentNode extends Node { +export class CommentNode extends Node { constructor (data) { super(); this.nodeType = COMMENT_NODE; @@ -119,7 +119,7 @@ class CommentNode extends Node { } } -class Element extends Node { +export class Element extends Node { constructor (tagName, attr, offsetPos) { super(); this.tagName = tagName; @@ -180,7 +180,7 @@ class Element extends Node { } } -class Document extends Node { +export class Document extends Node { constructor (data) { super(); this.nodeType = DOCUMENT_NODE; @@ -210,10 +210,3 @@ class Document extends Node { d.DOCUMENT_NODE = DOCUMENT_NODE; d.COMMENT_NODE = COMMENT_NODE; }); - -exports.Node = Node; -exports.RawNode = RawNode; -exports.TextNode = TextNode; -exports.CommentNode = CommentNode; -exports.Element = Element; -exports.Document = Document; diff --git a/src/constants.js b/src/constants.js index 10d1a79..e3180ea 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,4 +1,4 @@ -exports.singletons = { +export const singletons = { area: 1, base: 1, br: 1, diff --git a/src/html.js b/src/html.js index e169d4a..9384a17 100644 --- a/src/html.js +++ b/src/html.js @@ -1,7 +1,7 @@ -const re = require('./re'); -const Ribbon = require('./Ribbon'); -const { Element, TextNode, CommentNode } = require('./Node'); -const { singletons } = require('./constants'); +import re from './re.js'; +import Ribbon from './Ribbon.js'; +import { Element, TextNode, CommentNode } from './Node.js'; +import { singletons } from './constants.js'; re.pattern.html_id = '[a-zA-Z][a-zA-Z\\d:]*'; re.pattern.html_attr = '(?:"[^"]+"|\'[^\']+\'|[^>\\s]+)'; @@ -12,23 +12,23 @@ const reEndTag = re.compile(/^<\/([:html_id:])([^>]*)>/); const reTag = re.compile(/^<([:html_id:])((?:\s[^=\s/]+(?:\s*=\s*[:html_attr:])?)+)?\s*(\/?)>/); const reHtmlTagBlock = re.compile(/^\s*<([:html_id:](?::[a-zA-Z\d]+)*)((?:\s[^=\s/]+(?:\s*=\s*[:html_attr:])?)+)?\s*(\/?)>/); -function testComment (src) { +export function testComment (src) { return reComment.exec(src); } -function testOpenTagBlock (src) { +export function testOpenTagBlock (src) { return reHtmlTagBlock.exec(src); } -function testOpenTag (src) { +export function testOpenTag (src) { return reTag.exec(src); } -function testCloseTag (src) { +export function testCloseTag (src) { return reEndTag.exec(src); } -function parseHtmlAttr (attrSrc) { +export function parseHtmlAttr (attrSrc) { // parse ATTR and add to element const attr = {}; let m; @@ -48,7 +48,7 @@ const TEXT = 'TEXT'; const COMMENT = 'COMMENT'; const WS = 'WS'; -function tokenize (src, whitelistTags, lazy, offset) { +export function tokenize (src, whitelistTags, lazy, offset) { const tokens = []; let textMode = false; const oktag = tag => { @@ -148,7 +148,7 @@ function tokenize (src, whitelistTags, lazy, offset) { // This "indesciminately" parses HTML text into a list of JSON-ML element // No steps are taken however to prevent things like

    - user can still create nonsensical but "well-formed" markup -function parse (tokens, lazy) { +export function parseHtml (tokens, lazy) { const root = new Element('root'); const stack = []; let curr = root; @@ -196,13 +196,3 @@ function parse (tokens, lazy) { root.children.sourceLength = token ? token.pos + token.src.length : 0; return root.children; } - -module.exports = { - tokenize: tokenize, - parseHtml: parse, - parseHtmlAttr: parseHtmlAttr, - testCloseTag: testCloseTag, - testOpenTagBlock: testOpenTagBlock, - testOpenTag: testOpenTag, - testComment: testComment -}; diff --git a/src/index.js b/src/index.js index d4b14e4..48b9565 100644 --- a/src/index.js +++ b/src/index.js @@ -5,12 +5,11 @@ ** */ -const merge = require('./merge'); -const { parseFlow } = require('./textile/flow'); -const { parseHtml } = require('./html'); -const { Document, Element, RawNode, TextNode, CommentNode } = require('./Node'); +import { parseFlow } from './textile/flow.js'; +export { parseHtml } from './html.js'; +import { Document, Element, RawNode, TextNode, CommentNode } from './Node.js'; -function parse (tx, opt) { +function parseTextile (tx, opt) { const root = new Document(); root.pos.offset = 0; root.appendChild(parseFlow(tx, opt)); @@ -40,11 +39,11 @@ function addLines (rootNode, sourceTx) { return rootNode; } -function textile (sourceTx, opt) { +export default function textile (sourceTx, opt) { // get a throw-away copy of options opt = Object.assign({}, textile.defaults, opt); // run the converter - return parse(sourceTx, opt).toHTML(); + return parseTextile(sourceTx, opt).toHTML(); }; textile.CommentNode = CommentNode; @@ -59,17 +58,16 @@ textile.defaults = { breaks: true }; -textile.setOptions = textile.setoptions = opt => { - merge(textile.defaults, opt); +textile.setOptions = opt => { + Object.assign(textile.defaults, opt); return this; }; -textile.parse = textile.convert = textile; -textile.parseHtml = parseHtml; - +textile.convert = textile; +textile.parse = textile; textile.parseTree = function (sourceTx, opt) { opt = Object.assign({}, textile.defaults, opt); - return addLines(parse(sourceTx, opt), sourceTx); + return addLines(parseTextile(sourceTx, opt), sourceTx); }; -module.exports = textile; +export const parseTree = textile.parseTree; diff --git a/src/merge.js b/src/merge.js deleted file mode 100644 index 185a5ad..0000000 --- a/src/merge.js +++ /dev/null @@ -1,9 +0,0 @@ -// merge object b properties into object a -module.exports = function merge (a, b) { - if (b) { - for (const k in b) { - a[k] = b[k]; - } - } - return a; -}; diff --git a/src/re.js b/src/re.js index 4519bd3..d38f3c9 100644 --- a/src/re.js +++ b/src/re.js @@ -8,7 +8,7 @@ const _cache = {}; -const re = module.exports = { +const re = { pattern: { punct: '[!-/:-@\\[\\\\\\]-`{-~]', @@ -72,3 +72,5 @@ const re = module.exports = { } }; + +export default re; diff --git a/src/ribbon.js b/src/ribbon.js index 97160bc..699c6bd 100644 --- a/src/ribbon.js +++ b/src/ribbon.js @@ -1,4 +1,4 @@ -module.exports = class Ribbon { +export default class Ribbon { constructor (feed, skew = 0) { this._org = String(feed); this._feed = this._org; diff --git a/src/textile/attr.js b/src/textile/attr.js index f2e212b..7f5d199 100644 --- a/src/textile/attr.js +++ b/src/textile/attr.js @@ -23,7 +23,7 @@ const pbaVAlignLookup = { '-': 'middle' }; -function copyAttr (s, blacklist) { +export function copyAttr (s, blacklist) { if (!s) { return undefined; } const d = {}; for (const k in s) { @@ -55,7 +55,7 @@ function testBlock (name) { only accepts valid BCP 47 language tags, but who knows what atrocities are being preformed out there in the real world. So this attempts to emulate the other libraries. */ -function parseAttr (input, element, endToken) { +export function parseAttr (input, element, endToken) { input = String(input || ''); if (!input || element === 'notextile') { return [ 0, {} ]; @@ -177,8 +177,3 @@ function parseAttr (input, element, endToken) { return (remaining === input) ? [ 0, {} ] : [ input.length - remaining.length, o ]; } - -module.exports = { - copyAttr: copyAttr, - parseAttr: parseAttr -}; diff --git a/src/textile/deflist.js b/src/textile/deflist.js index eec5cd6..92e3459 100644 --- a/src/textile/deflist.js +++ b/src/textile/deflist.js @@ -1,18 +1,16 @@ /* definitions list parser */ -const { Element, TextNode } = require('../Node'); +import { Element, TextNode } from '../Node.js'; +import { parsePhrase } from './phrase.js'; +import { parseFlow } from './flow.js'; const reDeflist = /^((?:- (?:[^\n]\n?)+?)+(:=)(?: *\n[^\0]+?=:(?:\n|$)|(?:[^\0]+?(?:$|\n(?=\n|- )))))+/; const reItem = /^((?:- (?:[^\n]\n?)+?)+)(:=)( *\n[^\0]+?=:\s*(?:\n|$)|(?:[^\0]+?(?:$|\n(?=\n|- ))))/; -function testDefList (src) { +export function testDefList (src) { return reDeflist.exec(src); } -function parseDefList (src, options) { - // late loading to get around the lack of non-circular-dependency support in RequireJS - const parsePhrase = require('./phrase').parsePhrase; - const parseFlow = require('./flow').parseFlow; - +export function parseDefList (src, options) { const deflist = new Element('dl').setPos(src.offset); deflist.appendChild(new TextNode('\n')); @@ -55,6 +53,3 @@ function parseDefList (src, options) { return deflist; } - -exports.testDefList = testDefList; -exports.parseDefList = parseDefList; diff --git a/src/textile/flow.js b/src/textile/flow.js index c85009d..bc92694 100644 --- a/src/textile/flow.js +++ b/src/textile/flow.js @@ -1,20 +1,20 @@ /* ** textile flow content parser */ -const Ribbon = require('../Ribbon'); -const { Element, TextNode, RawNode, CommentNode } = require('../Node'); -const re = require('../re'); +import Ribbon from '../Ribbon.js'; +import { Element, TextNode, RawNode, CommentNode } from '../Node.js'; +import re from '../re.js'; -const { parseHtml, tokenize, parseHtmlAttr, testComment, testOpenTagBlock } = require('../html'); -const { singletons } = require('../constants'); +import { parseHtml, tokenize, parseHtmlAttr, testComment, testOpenTagBlock } from '../html.js'; +import { singletons } from '../constants.js'; -const { parsePhrase } = require('./phrase'); -const { copyAttr, parseAttr } = require('./attr'); -const { testList, parseList } = require('./list'); -const { testDefList, parseDefList } = require('./deflist'); -const { testTable, parseTable } = require('./table'); +import { parsePhrase } from './phrase.js'; +import { copyAttr, parseAttr } from './attr.js'; +import { testList, parseList } from './list.js'; +import { testDefList, parseDefList } from './deflist.js'; +import { testTable, parseTable } from './table.js'; -const { txblocks, txlisthd, txattr } = require('./re_ext'); +import { txblocks, txlisthd, txattr } from './re_ext.js'; re.pattern.txblocks = txblocks; re.pattern.txlisthd = txlisthd; re.pattern.txattr = txattr; @@ -71,7 +71,7 @@ function paragraph (src, { tag = 'p', attr = {}, linebreak = '\n', options }) { return out; }; -function parseFlow (src, options) { +export function parseFlow (src, options) { const root = new Element('root'); let linkRefs; @@ -339,5 +339,3 @@ function parseFlow (src, options) { return root.children; } - -exports.parseFlow = parseFlow; diff --git a/src/textile/glyph.js b/src/textile/glyph.js index 73f32d1..119d7b1 100644 --- a/src/textile/glyph.js +++ b/src/textile/glyph.js @@ -1,6 +1,5 @@ /* textile glyph parser */ - -const re = require('../re'); +import re from '../re.js'; const reApostrophe = /(\w)'(\w)/g; const reArrow = /([^-]|^)->/; @@ -18,7 +17,7 @@ const reRegistered = /(\b ?|\s|^)(?:\(R\)|\[R\])/gi; const reSinglePrime = re.compile(/(\d*[.,]?\d+)'(?=\s|$|[:punct:])/g); const reTrademark = /(\b ?|\s|^)(?:\((?:TM|tm)\)|\[(?:TM|tm)\])/g; -exports.parseGlyph = function parseGlyph (src) { +export function parseGlyph (src) { if (typeof src !== 'string') { return src; } diff --git a/src/textile/list.js b/src/textile/list.js index ce0f333..9d765fb 100644 --- a/src/textile/list.js +++ b/src/textile/list.js @@ -1,11 +1,11 @@ /* textile list parser */ -const re = require('../re'); -const { Element, TextNode } = require('../Node'); +import re from '../re.js'; +import { Element, TextNode } from '../Node.js'; -const { parseAttr } = require('./attr'); -const { parsePhrase } = require('./phrase'); +import { parseAttr } from './attr.js'; +import { parsePhrase } from './phrase.js'; -const { txlisthd, txlisthd2 } = require('./re_ext'); +import { txlisthd, txlisthd2 } from './re_ext.js'; re.pattern.txlisthd = txlisthd; re.pattern.txlisthd2 = txlisthd2; const reList = re.compile(/^((?:[:txlisthd:][^\0]*?(?:\r?\n|$))+)(\s*\n|$)/, 's'); @@ -15,12 +15,11 @@ const listPad = n => { return '\n' + '\t'.repeat(n); }; -function testList (src) { +export function testList (src) { return reList.exec(src); } -function parseList (src, options) { - +export function parseList (src, options) { const maybeMoveAttr = node => { if (node.attrCount === 1) { const firstChild = node.ul.children.find(d => d.tagName === 'li'); @@ -146,8 +145,3 @@ function parseList (src, options) { return s.ul; } - -module.exports = { - testList: testList, - parseList: parseList -}; diff --git a/src/textile/phrase.js b/src/textile/phrase.js index 1314080..d35f582 100644 --- a/src/textile/phrase.js +++ b/src/textile/phrase.js @@ -1,14 +1,14 @@ /* textile inline parser */ -const Ribbon = require('../Ribbon'); -const { Element, TextNode, RawNode, CommentNode } = require('../Node'); -const re = require('../re'); +import Ribbon from '../Ribbon.js'; +import { Element, TextNode, RawNode, CommentNode } from '../Node.js'; +import re from '../re.js'; -const { parseAttr } = require('./attr'); -const { parseGlyph } = require('./glyph'); -const { parseHtml, parseHtmlAttr, tokenize, testComment, testOpenTag } = require('../html'); -const { singletons } = require('../constants'); +import { parseAttr } from './attr.js'; +import { parseGlyph } from './glyph.js'; +import { parseHtml, parseHtmlAttr, tokenize, testComment, testOpenTag } from '../html.js'; +import { singletons } from '../constants.js'; -const { ucaps, txattr, txcite } = require('./re_ext'); +import { ucaps, txattr, txcite } from './re_ext.js'; re.pattern.txattr = txattr; re.pattern.txcite = txcite; re.pattern.ucaps = ucaps; @@ -58,7 +58,7 @@ const getMatchRe = (tok, fence, code) => { return re.compile(`${mMid}(?:${re.escape(tok)})${mEnd}`); }; -function parsePhrase (src, options) { +export function parsePhrase (src, options) { // FIXME: remove this if (!(src instanceof Ribbon)) { src = new Ribbon(src); @@ -278,5 +278,3 @@ function parsePhrase (src, options) { }); return root.children; } - -exports.parsePhrase = parsePhrase; diff --git a/src/textile/re_ext.js b/src/textile/re_ext.js index 37ca3c8..0215fa7 100644 --- a/src/textile/re_ext.js +++ b/src/textile/re_ext.js @@ -1,8 +1,8 @@ /* eslint camelcase: 0 */ -exports.txblocks = '(?:b[qc]|div|notextile|pre|h[1-6]|fn\\d+|p|###)'; +export const txblocks = '(?:b[qc]|div|notextile|pre|h[1-6]|fn\\d+|p|###)'; -exports.ucaps = 'A-Z' + +export const ucaps = 'A-Z' + // Latin extended À-Þ '\u00c0-\u00d6\u00d8-\u00de' + // Latin caps with embelishments and ligatures... @@ -21,15 +21,16 @@ exports.ucaps = 'A-Z' + '\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e' + '\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa'; -exports.txcite = ':((?:[^\\s()]|\\([^\\s()]+\\)|[()])+?)(?=[!-\\.:-@\\[\\\\\\]-`{-~]+(?:$|\\s)|$|\\s)'; +export const txcite = ':((?:[^\\s()]|\\([^\\s()]+\\)|[()])+?)(?=[!-\\.:-@\\[\\\\\\]-`{-~]+(?:$|\\s)|$|\\s)'; -const attr_class = exports.attr_class = '\\([^\\)]+\\)'; -const attr_style = exports.attr_style = '\\{[^\\}]+\\}'; -const attr_lang = exports.attr_lang = '\\[[^\\[\\]]+\\]'; -const attr_align = exports.attr_align = '(?:<>|<|>|=)'; -const attr_pad = exports.attr_pad = '[\\(\\)]+'; +export const attr_class = '\\([^\\)]+\\)'; +export const attr_style = '\\{[^\\}]+\\}'; +export const attr_lang = '\\[[^\\[\\]]+\\]'; +export const attr_align = '(?:<>|<|>|=)'; +export const attr_pad = '[\\(\\)]+'; -const txattr = exports.txattr = `(?:${attr_class}|${attr_style}|${attr_lang}|${attr_align}|${attr_pad})*`; +export const txattr = `(?:${attr_class}|${attr_style}|${attr_lang}|${attr_align}|${attr_pad})*`; + +export const txlisthd = `[\\t ]*(\\*|\\#(?:_|\\d+)?)${txattr}(?: +\\S|\\.\\s*(?=\\S|\\n))`; +export const txlisthd2 = `[\\t ]*[\\#\\*]*(\\*|\\#(?:_|\\d+)?)${txattr}(?: +\\S|\\.\\s*(?=\\S|\\n))`; -exports.txlisthd = `[\\t ]*(\\*|\\#(?:_|\\d+)?)${txattr}(?: +\\S|\\.\\s*(?=\\S|\\n))`; -exports.txlisthd2 = `[\\t ]*[\\#\\*]*(\\*|\\#(?:_|\\d+)?)${txattr}(?: +\\S|\\.\\s*(?=\\S|\\n))`; diff --git a/src/textile/table.js b/src/textile/table.js index f10be49..3f94857 100644 --- a/src/textile/table.js +++ b/src/textile/table.js @@ -1,10 +1,10 @@ /* textile table parser */ -const re = require('../re'); -const { Element, TextNode } = require('../Node'); -const { parseAttr } = require('./attr'); -const { parsePhrase } = require('./phrase'); -const { txattr } = require('./re_ext'); +import re from '../re.js'; +import { Element, TextNode } from '../Node.js'; +import { parseAttr } from './attr.js'; +import { parsePhrase } from './phrase.js'; +import { txattr } from './re_ext.js'; re.pattern.txattr = txattr; @@ -21,7 +21,7 @@ const charToTag = { '-': 'tbody' }; -function parseColgroup (src) { +export function parseColgroup (src) { const colgroup = new Element('colgroup', {}, src.offset); src.splitBy(/\|/, (bit, isCol) => { const col = isCol ? {} : colgroup.attr; @@ -56,11 +56,11 @@ function parseColgroup (src) { return colgroup; } -function testTable (src) { +export function testTable (src) { return reTable.exec(src); } -function parseTable (src, options) { +export function parseTable (src, options) { const rowgroups = []; let colgroup; let caption; @@ -206,9 +206,3 @@ function parseTable (src, options) { table.appendChild(new TextNode('\n')); return table; } - -module.exports = { - parseColgroup: parseColgroup, - parseTable: parseTable, - testTable: testTable -}; diff --git a/test/.eslintrc b/test/.eslintrc deleted file mode 100644 index f537557..0000000 --- a/test/.eslintrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - rules: { - no-multi-str: 'off' - }, - env: { - "node": true - } -} diff --git a/test/basic.js b/test/basic.js index 9095517..bf32220 100644 --- a/test/basic.js +++ b/test/basic.js @@ -1,40 +1,41 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // basic.yml -test('paragraphs', function (t) { - const tx = 'A single paragraph.\n\n\ -Followed by another.'; +test('paragraphs', t => { + const tx = `A single paragraph. + +Followed by another.`; t.is(textile.convert(tx), - '

    A single paragraph.

    \n\ -

    Followed by another.

    ', tx); + `

    A single paragraph.

    +

    Followed by another.

    `, tx); t.end(); }); -test('blocks with spaces on the blank line in between', function (t) { - const tx = 'This is line one\n\ - \n\ -This is line two'; +test('blocks with spaces on the blank line in between', t => { + const tx = `This is line one + +This is line two`; t.is(textile.convert(tx), - '

    This is line one

    \n\ -

    This is line two

    ', tx); + `

    This is line one

    +

    This is line two

    `, tx); t.end(); }); -test('blocks with tabl on the blank line in between', function (t) { - const tx = 'This is line one\n\ -\t\n\ -This is line two'; +test('blocks with tabl on the blank line in between', t => { + const tx = `This is line one +\t +This is line two`; t.is(textile.convert(tx), - '

    This is line one

    \n\ -

    This is line two

    ', tx); + `

    This is line one

    +

    This is line two

    `, tx); t.end(); }); -test('block containing block start', function (t) { +test('block containing block start', t => { const tx = 'I saw a ship. It ate my elephant.'; t.is(textile.convert(tx), '

    I saw a ship. It ate my elephant.

    ', tx); @@ -42,57 +43,61 @@ test('block containing block start', function (t) { }); -test('extended block containing block start', function (t) { - const tx = 'p.. I saw a ship. It ate my elephant.\n\n\ -When the elephant comes to take a p. you...'; +test('extended block containing block start', t => { + const tx = `p.. I saw a ship. It ate my elephant. + +When the elephant comes to take a p. you...`; t.is(textile.convert(tx), - '

    I saw a ship. It ate my elephant.

    \n\ -

    When the elephant comes to take a p. you…

    ', tx); + `

    I saw a ship. It ate my elephant.

    +

    When the elephant comes to take a p. you…

    `, tx); t.end(); }); -test('blockquote containing block start', function (t) { +test('blockquote containing block start', t => { const tx = 'bq. I saw a ship. It ate my elephant.'; t.is(textile.convert(tx), - '
    \n\ -

    I saw a ship. It ate my elephant.

    \n\ -
    ', tx); + `
    +

    I saw a ship. It ate my elephant.

    +
    `, tx); t.end(); }); -test('extended blockquote containing block start', function (t) { - const tx = 'bq.. I saw a ship. It ate my elephant.\n\n\ -When the elephant comes to take a p. you...'; +test('extended blockquote containing block start', t => { + const tx = `bq.. I saw a ship. It ate my elephant. + +When the elephant comes to take a p. you...`; t.is(textile.convert(tx), - '
    \n\ -

    I saw a ship. It ate my elephant.

    \n\ -

    When the elephant comes to take a p. you…

    \n\ -
    ', tx); + `
    +

    I saw a ship. It ate my elephant.

    +

    When the elephant comes to take a p. you…

    +
    `, tx); t.end(); }); -test('notextile block', function (t) { - const tx = 'Some text:\n\n\ -\n\ -
    \n\
    -Some code\n\
    -
    \n\ -
    \n\n\ -Some more text.'; +test('notextile block', t => { + const tx = `Some text: + + +
    +Some code
    +
    +
    + +Some more text.`; t.is(textile.convert(tx), - '

    Some text:

    \n\ -
    \n\
    -Some code\n\
    -
    \n\ -

    Some more text.

    ', tx); + `

    Some text:

    +
    +Some code
    +
    +

    Some more text.

    `, tx); t.end(); }); -test('notextile block containing block start', function (t) { +test('notextile block containing block start', t => { const tx = 'notextile. I saw a ship. It ate my elephant.'; t.is(textile.convert(tx), 'I saw a ship. It ate my elephant.', tx); @@ -100,17 +105,19 @@ test('notextile block containing block start', function (t) { }); -test('extended notextile block containing block start', function (t) { - const tx = 'notextile.. I saw a ship. It ate my elephant.\n\n\ -When the elephant comes to take a p. you...'; +test('extended notextile block containing block start', t => { + const tx = `notextile.. I saw a ship. It ate my elephant. + +When the elephant comes to take a p. you...`; t.is(textile.convert(tx), - 'I saw a ship. It ate my elephant.\n\n\ -When the elephant comes to take a p. you...', tx); + `I saw a ship. It ate my elephant. + +When the elephant comes to take a p. you...`, tx); t.end(); }); -test('pre block containing block start', function (t) { +test('pre block containing block start', t => { const tx = 'pre. I saw a ship. It ate my elephant.'; t.is(textile.convert(tx), '
    I saw a ship. It ate my elephant.
    ', tx); @@ -118,41 +125,44 @@ test('pre block containing block start', function (t) { }); -test('extended pre block containing block start', function (t) { - const tx = 'pre.. I saw a ship. It ate my elephant.\n\n\ -When the elephant comes to take a p. you...'; +test('extended pre block containing block start', t => { + const tx = `pre.. I saw a ship. It ate my elephant. + +When the elephant comes to take a p. you...`; t.is(textile.convert(tx), - '
    I saw a ship. It ate my elephant.\n\n\
    -When the elephant comes to take a p. you...
    ', tx); + `
    I saw a ship. It ate my elephant.
    +
    +When the elephant comes to take a p. you...
    `, tx); t.end(); }); -test('html tags', function (t) { - const tx = 'I am very serious.\n\n\ -
    \n\
    -  I am very serious.\n\
    -
    '; +test('html tags', t => { + const tx = `I am very serious. + +
    +  I am very serious.
    +
    `; t.is(textile.convert(tx), - '

    I am very serious.

    \n\ -
    \n\
    -  I am <b>very</b> serious.\n\
    -
    ', tx); + `

    I am very serious.

    +
    +  I am <b>very</b> serious.
    +
    `, tx); t.end(); }); -test('line breaks', function (t) { - const tx = 'I spoke.\n\ -And none replied.'; +test('line breaks', t => { + const tx = `I spoke. +And none replied.`; t.is(textile.convert(tx), - '

    I spoke.
    \n\ -And none replied.

    ', tx); + `

    I spoke.
    +And none replied.

    `, tx); t.end(); }); -test('curly quotes', function (t) { +test('curly quotes', t => { const tx = '"Observe!"'; t.is(textile.convert(tx), '

    “Observe!”

    ', tx); @@ -160,17 +170,18 @@ test('curly quotes', function (t) { }); -test('quotes contained in multi-paragraph quotes', function (t) { - const tx = "\"I first learned about this thing called \"Redcloth\" several years ago.\n\n\ -\"It's wonderful.\""; +test('quotes contained in multi-paragraph quotes', t => { + const tx = `"I first learned about this thing called "Redcloth" several years ago. + +"It's wonderful."`; t.is(textile.convert(tx), - '

    “I first learned about this thing called “Redcloth” several years ago.

    \n\ -

    “It’s wonderful.”

    ', tx); + `

    “I first learned about this thing called “Redcloth” several years ago.

    +

    “It’s wonderful.”

    `, tx); t.end(); }); -test('double hyphens', function (t) { +test('double hyphens', t => { const tx = 'Observe--very nice!'; t.is(textile.convert(tx), '

    Observe—very nice!

    ', tx); @@ -178,7 +189,7 @@ test('double hyphens', function (t) { }); -test('double hyphens with spaces', function (t) { +test('double hyphens with spaces', t => { const tx = 'Observe -- very nice!'; t.is(textile.convert(tx), '

    Observe — very nice!

    ', tx); @@ -186,7 +197,7 @@ test('double hyphens with spaces', function (t) { }); -test('parenthetical phrase set off with em dashes', function (t) { +test('parenthetical phrase set off with em dashes', t => { const tx = 'An emdash indicates a parenthetical thought--like this one--which is set apart from the rest of a sentence.'; t.is(textile.convert(tx), '

    An emdash indicates a parenthetical thought—like this one—which is set apart from the rest of a sentence.

    ', tx); @@ -194,7 +205,7 @@ test('parenthetical phrase set off with em dashes', function (t) { }); -test('parenthetical phrase set off with em dashes surrounded by spaces', function (t) { +test('parenthetical phrase set off with em dashes surrounded by spaces', t => { const tx = 'An emdash indicates a parenthetical thought -- like this one -- which is set apart from the rest of a sentence.'; t.is(textile.convert(tx), '

    An emdash indicates a parenthetical thought — like this one — which is set apart from the rest of a sentence.

    ', tx); @@ -202,7 +213,7 @@ test('parenthetical phrase set off with em dashes surrounded by spaces', functio }); -test('single hyphens with spaces', function (t) { +test('single hyphens with spaces', t => { const tx = 'Observe - tiny and brief.'; t.is(textile.convert(tx), '

    Observe – tiny and brief.

    ', tx); @@ -210,7 +221,7 @@ test('single hyphens with spaces', function (t) { }); -test('midword hyphens ', function (t) { +test('midword hyphens ', t => { const tx = 'Observe the nicely-done hyphen.'; t.is(textile.convert(tx), '

    Observe the nicely-done hyphen.

    ', tx); @@ -218,7 +229,7 @@ test('midword hyphens ', function (t) { }); -test('ellipses', function (t) { +test('ellipses', t => { const tx = 'Observe...'; t.is(textile.convert(tx), '

    Observe…

    ', tx); @@ -226,7 +237,7 @@ test('ellipses', function (t) { }); -test('dimension sign', function (t) { +test('dimension sign', t => { const tx = 'Observe: 2x3.'; t.is(textile.convert(tx), '

    Observe: 2×3.

    ', tx); @@ -234,7 +245,7 @@ test('dimension sign', function (t) { }); -test('dimension sign with space after', function (t) { +test('dimension sign with space after', t => { const tx = 'The room is 2x3 inches big.'; t.is(textile.convert(tx), '

    The room is 2×3 inches big.

    ', tx); @@ -242,7 +253,7 @@ test('dimension sign with space after', function (t) { }); -test('dimension sign with spaces', function (t) { +test('dimension sign with spaces', t => { const tx = 'Observe: 2 x 4.'; t.is(textile.convert(tx), '

    Observe: 2 × 4.

    ', tx); @@ -250,7 +261,7 @@ test('dimension sign with spaces', function (t) { }); -test('dimension signs chained', function (t) { +test('dimension signs chained', t => { const tx = 'Observe: 2x3x4.'; t.is(textile.convert(tx), '

    Observe: 2×3×4.

    ', tx); @@ -258,7 +269,7 @@ test('dimension signs chained', function (t) { }); -test('dimension signs with double primes', function (t) { +test('dimension signs with double primes', t => { const tx = 'My mouse: 2.5" x 4".'; t.is(textile.convert(tx), '

    My mouse: 2.5″ × 4″.

    ', tx); @@ -266,7 +277,7 @@ test('dimension signs with double primes', function (t) { }); -test('dimension signs with single primes', function (t) { +test('dimension signs with single primes', t => { const tx = "My office: 5' x 4.5'."; t.is(textile.convert(tx), '

    My office: 5′ × 4.5′.

    ', tx); @@ -274,7 +285,7 @@ test('dimension signs with single primes', function (t) { }); -test('trademark and copyright', function (t) { +test('trademark and copyright', t => { const tx = 'one(TM), two(R), three(C).'; t.is(textile.convert(tx), '

    one™, two®, three©.

    ', tx); @@ -282,7 +293,7 @@ test('trademark and copyright', function (t) { }); -test('headers', function (t) { +test('headers', t => { const tx = 'h3. Header 3'; t.is(textile.convert(tx), '

    Header 3

    ', tx); @@ -290,21 +301,23 @@ test('headers', function (t) { }); -test('blockquote', function (t) { - const tx = 'Any old text\n\n\ -bq. A block quotation.\n\n\ -Any old text'; +test('blockquote', t => { + const tx = `Any old text + +bq. A block quotation. + +Any old text`; t.is(textile.convert(tx), - '

    Any old text

    \n\ -
    \n\ -

    A block quotation.

    \n\ -
    \n\ -

    Any old text

    ', tx); + `

    Any old text

    +
    +

    A block quotation.

    +
    +

    Any old text

    `, tx); t.end(); }); -test('footnote reference', function (t) { +test('footnote reference', t => { const tx = 'This is covered elsewhere[1].'; t.is(textile.convert(tx), '

    This is covered elsewhere1.

    ', tx); @@ -312,7 +325,7 @@ test('footnote reference', function (t) { }); -test('footnote', function (t) { +test('footnote', t => { const tx = 'fn1. Down here, in fact.'; t.is(textile.convert(tx), '

    1 Down here, in fact.

    ', tx); @@ -320,7 +333,7 @@ test('footnote', function (t) { }); -test('em', function (t) { +test('em', t => { const tx = 'I _believe_ every word.'; t.is(textile.convert(tx), '

    I believe every word.

    ', tx); @@ -328,7 +341,7 @@ test('em', function (t) { }); -test('strong', function (t) { +test('strong', t => { const tx = 'And then? She *fell*!'; t.is(textile.convert(tx), '

    And then? She fell!

    ', tx); @@ -336,7 +349,7 @@ test('strong', function (t) { }); -test('strong phrase beginning with a number', function (t) { +test('strong phrase beginning with a number', t => { const tx = '*10 times as many*'; t.is(textile.convert(tx), '

    10 times as many

    ', tx); @@ -344,17 +357,17 @@ test('strong phrase beginning with a number', function (t) { }); -test('force bold italics', function (t) { - const tx = 'I __know__.\n\ -I **really** __know__.'; +test('force bold italics', t => { + const tx = `I __know__. +I **really** __know__.`; t.is(textile.convert(tx), - '

    I know.
    \n\ -I really know.

    ', tx); + `

    I know.
    +I really know.

    `, tx); t.end(); }); -test('citation', function (t) { +test('citation', t => { const tx = "??Cat's Cradle?? by Vonnegut"; t.is(textile.convert(tx), '

    Cat’s Cradle by Vonnegut

    ', tx); @@ -362,7 +375,7 @@ test('citation', function (t) { }); -test('code phrases', function (t) { +test('code phrases', t => { const tx = 'Convert with @r.to_html@'; t.is(textile.convert(tx), '

    Convert with r.to_html

    ', tx); @@ -370,7 +383,7 @@ test('code phrases', function (t) { }); -test('code phrases not created with multiple email addresses', function (t) { +test('code phrases not created with multiple email addresses', t => { const tx = 'Please email why@domain.com or jason@domain.com.'; t.is(textile.convert(tx), '

    Please email why@domain.com or jason@domain.com.

    ', tx); @@ -378,7 +391,7 @@ test('code phrases not created with multiple email addresses', function (t) { }); -test('del', function (t) { +test('del', t => { const tx = "I'm -sure- not sure."; t.is(textile.convert(tx), '

    I’m sure not sure.

    ', tx); @@ -386,7 +399,7 @@ test('del', function (t) { }); -test('del beginning a phrase', function (t) { +test('del beginning a phrase', t => { const tx = '-delete-'; t.is(textile.convert(tx), '

    delete

    ', tx); @@ -394,7 +407,7 @@ test('del beginning a phrase', function (t) { }); -test('ins', function (t) { +test('ins', t => { const tx = 'You are a +pleasant+ child.'; t.is(textile.convert(tx), '

    You are a pleasant child.

    ', tx); @@ -402,7 +415,7 @@ test('ins', function (t) { }); -test('superscript', function (t) { +test('superscript', t => { const tx = 'a ^2^ + b ^2^ = c ^2^'; t.is(textile.convert(tx), '

    a 2 + b 2 = c 2

    ', tx); @@ -410,7 +423,7 @@ test('superscript', function (t) { }); -test('parenthetical superscript phrase', function (t) { +test('parenthetical superscript phrase', t => { const tx = '^(image courtesy NASA)^'; t.is(textile.convert(tx), '

    (image courtesy NASA)

    ', tx); @@ -418,7 +431,7 @@ test('parenthetical superscript phrase', function (t) { }); -test('subscript', function (t) { +test('subscript', t => { const tx = 'log ~2~ x'; t.is(textile.convert(tx), '

    log 2 x

    ', tx); @@ -426,7 +439,7 @@ test('subscript', function (t) { }); -test('parenthetical subscript phrase', function (t) { +test('parenthetical subscript phrase', t => { const tx = '~(image courtesy NASA)~'; t.is(textile.convert(tx), '

    (image courtesy NASA)

    ', tx); @@ -434,7 +447,7 @@ test('parenthetical subscript phrase', function (t) { }); -test('tight superscript and subscript', function (t) { +test('tight superscript and subscript', t => { const tx = 'f(x, n) = log[~4~]x[^n^]'; t.is(textile.convert(tx), '

    f(x, n) = log4xn

    ', tx); @@ -442,7 +455,7 @@ test('tight superscript and subscript', function (t) { }); -test('span', function (t) { +test('span', t => { const tx = "I'm %unaware% of most soft drinks."; t.is(textile.convert(tx), '

    I’m unaware of most soft drinks.

    ', tx); @@ -450,27 +463,27 @@ test('span', function (t) { }); -test('style span', function (t) { - const tx = "I'm %{color:red}unaware%\n\ -of most %{font-size:0.5em;}soft drinks%."; +test('style span', t => { + const tx = `I'm %{color:red}unaware% +of most %{font-size:0.5em;}soft drinks%.`; t.is(textile.convert(tx), - '

    I’m unaware
    \n\ -of most soft drinks.

    ', tx); + `

    I’m unaware
    +of most soft drinks.

    `, tx); t.end(); }); -test('percent sign', function (t) { - const tx = 'http://blah.com/one%20two%20three\n\ -(min)5%-95%(max)'; +test('percent sign', t => { + const tx = `http://blah.com/one%20two%20three +(min)5%-95%(max)`; t.is(textile.convert(tx), - '

    http://blah.com/one%20two%20three
    \n\ -(min)5%-95%(max)

    ', tx); + `

    http://blah.com/one%20two%20three
    +(min)5%-95%(max)

    `, tx); t.end(); }); -test('css class', function (t) { +test('css class', t => { const tx = 'p(example1). An example'; t.is(textile.convert(tx), '

    An example

    ', tx); @@ -478,7 +491,7 @@ test('css class', function (t) { }); -test('css id', function (t) { +test('css id', t => { const tx = 'p(#big-red). Red here'; t.is(textile.convert(tx), '

    Red here

    ', tx); @@ -486,7 +499,7 @@ test('css id', function (t) { }); -test('css id with initial uppercase', function (t) { +test('css id with initial uppercase', t => { const tx = 'p(#Foo). bar'; t.is(textile.convert(tx), '

    bar

    ', tx); @@ -494,7 +507,7 @@ test('css id with initial uppercase', function (t) { }); -test('css class uppercase', function (t) { +test('css class uppercase', t => { const tx = 'p(fooBar). baz'; t.is(textile.convert(tx), '

    baz

    ', tx); @@ -502,7 +515,7 @@ test('css class uppercase', function (t) { }); -test('class and id combined', function (t) { +test('class and id combined', t => { const tx = 'p(example1#big-red2). Red here'; t.is(textile.convert(tx), '

    Red here

    ', tx); @@ -510,7 +523,7 @@ test('class and id combined', function (t) { }); -test('css style', function (t) { +test('css style', t => { const tx = "p{color:blue;margin:30px;font-size:120%;font-family:'Comic Sans'}. Spacey blue"; t.is(textile.convert(tx), '

    Spacey blue

    ', tx); @@ -518,7 +531,7 @@ test('css style', function (t) { }); -test('language designations', function (t) { +test('language designations', t => { const tx = 'p[fr]. rouge'; t.is(textile.convert(tx), '

    rouge

    ', tx); @@ -526,35 +539,35 @@ test('language designations', function (t) { }); -test('block attributes on phrase modifiers', function (t) { - const tx = 'I seriously *{color:red}blushed*\n\ -when I _(big)sprouted_ that\n\ -corn stalk from my\n\ -%[es]cabeza%.'; +test('block attributes on phrase modifiers', t => { + const tx = `I seriously *{color:red}blushed* +when I _(big)sprouted_ that +corn stalk from my +%[es]cabeza%.`; t.is(textile.convert(tx), - '

    I seriously blushed
    \n\ -when I sprouted that
    \n\ -corn stalk from my
    \n\ -cabeza.

    ', tx); + `

    I seriously blushed
    +when I sprouted that
    +corn stalk from my
    +cabeza.

    `, tx); t.end(); }); -test('inline attributes preceded by text are treated as literal', function (t) { - const tx = 'I *seriously {color:red}blushed*\n\ -when I _first (big)sprouted_ that\n\ -corn stalk from my\n\ -%grande [es]cabeza%.'; +test('inline attributes preceded by text are treated as literal', t => { + const tx = `I *seriously {color:red}blushed* +when I _first (big)sprouted_ that +corn stalk from my +%grande [es]cabeza%.`; t.is(textile.convert(tx), - '

    I seriously {color:red}blushed
    \n\ -when I first (big)sprouted that
    \n\ -corn stalk from my
    \n\ -grande [es]cabeza.

    ', tx); + `

    I seriously {color:red}blushed
    +when I first (big)sprouted that
    +corn stalk from my
    +grande [es]cabeza.

    `, tx); t.end(); }); -test('align justified', function (t) { +test('align justified', t => { const tx = 'p<>. justified'; t.is(textile.convert(tx), '

    justified

    ', tx); @@ -562,7 +575,7 @@ test('align justified', function (t) { }); -test('indentation', function (t) { +test('indentation', t => { const tx = 'p))). right ident 3em'; t.is(textile.convert(tx), '

    right ident 3em

    ', tx); @@ -570,7 +583,7 @@ test('indentation', function (t) { }); -test('indentation and alignment', function (t) { +test('indentation and alignment', t => { const tx = 'h2()>. Bingo.'; t.is(textile.convert(tx), '

    Bingo.

    ', tx); @@ -578,7 +591,7 @@ test('indentation and alignment', function (t) { }); -test('many modifiers combined', function (t) { +test('many modifiers combined', t => { const tx = 'h3()>[no]{color:red}. Bingo'; t.is(textile.convert(tx), '

    Bingo

    ', tx); @@ -586,121 +599,125 @@ test('many modifiers combined', function (t) { }); -test('code blocks', function (t) { - const tx = "
    \n\
    -\n\
    -  a.gsub!( /\n\
    -
    "; +test('code blocks', t => { + const tx = `
    +
    +  a.gsub!( /
    +
    `; t.is(textile.convert(tx), - "
    \n\
    -\n\
    -  a.gsub!( /</, '' )\n\
    -\n\
    -
    ", tx); + `
    +
    +  a.gsub!( /</, '' )
    +
    +
    `, tx); t.end(); }); -test('div tags', function (t) { - const tx = '
    \n\n\ -h3. Sidebar\n\n\ -"Hobix":http://hobix.com/\n\ -"Ruby":http://ruby-lang.org/\n\n\ -
    \n\n\ -The main text of the page goes here and will stay to the left of the sidebar.'; +test('div tags', t => { + const tx = `
    + +h3. Sidebar + +"Hobix":http://hobix.com/ +"Ruby":http://ruby-lang.org/ + +
    + +The main text of the page goes here and will stay to the left of the sidebar.`; t.is(textile.convert(tx), - '
    \n\ -

    Sidebar

    \n\ -

    Hobix
    \n\ -Ruby

    \n\ -
    \n\ -

    The main text of the page goes here and will stay to the left of the sidebar.

    ', tx); + `
    +

    Sidebar

    +

    Hobix
    +Ruby

    +
    +

    The main text of the page goes here and will stay to the left of the sidebar.

    `, tx); t.end(); }); -test('numbered list', function (t) { - const tx = '# A first item\n\ -# A second item\n\ -# A third'; +test('numbered list', t => { + const tx = `# A first item +# A second item +# A third`; t.is(textile.convert(tx), - '
      \n\ -\t
    1. A first item
    2. \n\ -\t
    3. A second item
    4. \n\ -\t
    5. A third
    6. \n\ -
    ', tx); + `
      +\t
    1. A first item
    2. +\t
    3. A second item
    4. +\t
    5. A third
    6. +
    `, tx); t.end(); }); -test('nested numbered lists', function (t) { - const tx = '# Fuel could be:\n\ -## Coal\n\ -## Gasoline\n\ -## Electricity\n\ -# Humans need only:\n\ -## Water\n\ -## Protein'; +test('nested numbered lists', t => { + const tx = `# Fuel could be: +## Coal +## Gasoline +## Electricity +# Humans need only: +## Water +## Protein`; t.is(textile.convert(tx), - '
      \n\ -\t
    1. Fuel could be:\n\ -\t
        \n\ -\t\t
      1. Coal
      2. \n\ -\t\t
      3. Gasoline
      4. \n\ -\t\t
      5. Electricity
      6. \n\ -\t
    2. \n\ -\t
    3. Humans need only:\n\ -\t
        \n\ -\t\t
      1. Water
      2. \n\ -\t\t
      3. Protein
      4. \n\ -\t
    4. \n\ -
    ', tx); + `
      +\t
    1. Fuel could be: +\t
        +\t\t
      1. Coal
      2. +\t\t
      3. Gasoline
      4. +\t\t
      5. Electricity
      6. +\t
    2. +\t
    3. Humans need only: +\t
        +\t\t
      1. Water
      2. +\t\t
      3. Protein
      4. +\t
    4. +
    `, tx); t.end(); }); -test('bulleted list', function (t) { - const tx = '* A first item\n\ -* A second item\n\ -* A third'; +test('bulleted list', t => { + const tx = `* A first item +* A second item +* A third`; t.is(textile.convert(tx), - '
      \n\ -\t
    • A first item
    • \n\ -\t
    • A second item
    • \n\ -\t
    • A third
    • \n\ -
    ', tx); + `
      +\t
    • A first item
    • +\t
    • A second item
    • +\t
    • A third
    • +
    `, tx); t.end(); }); -test('nested bulleted lists', function (t) { - const tx = '* Fuel could be:\n\ -** Coal\n\ -** Gasoline\n\ -** Electricity\n\ -* Humans need only:\n\ -** Water\n\ -** Protein'; +test('nested bulleted lists', t => { + const tx = `* Fuel could be: +** Coal +** Gasoline +** Electricity +* Humans need only: +** Water +** Protein`; t.is(textile.convert(tx), - '
      \n\ -\t
    • Fuel could be:\n\ -\t
        \n\ -\t\t
      • Coal
      • \n\ -\t\t
      • Gasoline
      • \n\ -\t\t
      • Electricity
      • \n\ -\t
    • \n\ -\t
    • Humans need only:\n\ -\t
        \n\ -\t\t
      • Water
      • \n\ -\t\t
      • Protein
      • \n\ -\t
    • \n\ -
    ', tx); + `
      +\t
    • Fuel could be: +\t
        +\t\t
      • Coal
      • +\t\t
      • Gasoline
      • +\t\t
      • Electricity
      • +\t
    • +\t
    • Humans need only: +\t
        +\t\t
      • Water
      • +\t\t
      • Protein
      • +\t
    • +
    `, tx); t.end(); }); -test('links', function (t) { +test('links', t => { const tx = 'I searched "Google":http://google.com.'; t.is(textile.convert(tx), '

    I searched Google.

    ', tx); @@ -708,20 +725,21 @@ test('links', function (t) { }); -test('link aliases', function (t) { - const tx = "I am crazy about \"Hobix\":hobix\n\ -and \"it's\":hobix \"all\":hobix I ever\n\ -\"link to\":hobix!\n\n\ -[hobix]http://hobix.com"; +test('link aliases', t => { + const tx = `I am crazy about "Hobix":hobix +and "it's":hobix "all":hobix I ever +"link to":hobix! + +[hobix]http://hobix.com`; t.is(textile.convert(tx), - '

    I am crazy about Hobix
    \n\ -and it’s all I ever
    \n\ -link to!

    ', tx); + `

    I am crazy about Hobix
    +and it’s all I ever
    +link to!

    `, tx); t.end(); }); -test('image', function (t) { +test('image', t => { const tx = '!http://hobix.com/sample.jpg!'; t.is(textile.convert(tx), '

    ', tx); @@ -729,7 +747,7 @@ test('image', function (t) { }); -test('image title', function (t) { +test('image title', t => { const tx = '!openwindow1.gif(Bunny.)!'; t.is(textile.convert(tx), '

    Bunny.

    ', tx); @@ -737,7 +755,7 @@ test('image title', function (t) { }); -test('image links', function (t) { +test('image links', t => { const tx = '!openwindow1.gif!:http://hobix.com/'; t.is(textile.convert(tx), '

    ', tx); @@ -745,19 +763,20 @@ test('image links', function (t) { }); -test('image alignments', function (t) { - const tx = '!>obake.gif!\n\n\ -And others sat all round the small\n\ -machine and paid it to sing to them.'; +test('image alignments', t => { + const tx = `!>obake.gif! + +And others sat all round the small +machine and paid it to sing to them.`; t.is(textile.convert(tx), - '

    \n\ -

    And others sat all round the small
    \n\ -machine and paid it to sing to them.

    ', tx); + `

    +

    And others sat all round the small
    +machine and paid it to sing to them.

    `, tx); t.end(); }); -test('acronym definitions', function (t) { +test('acronym definitions', t => { const tx = 'We use CSS(Cascading Style Sheets).'; t.is(textile.convert(tx), '

    We use CSS.

    ', tx); @@ -765,7 +784,7 @@ test('acronym definitions', function (t) { }); -test('two-letter acronyms', function (t) { +test('two-letter acronyms', t => { const tx = 'It employs AI(artificial intelligence) processing.'; t.is(textile.convert(tx), '

    It employs AI processing.

    ', tx); @@ -773,252 +792,260 @@ test('two-letter acronyms', function (t) { }); -test('tables', function (t) { - const tx = '| name | age | sex |\n\ -| joan | 24 | f |\n\ -| archie | 29 | m |\n\ -| bella | 45 | f |'; - t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
    name age sex
    joan 24 f
    archie 29 m
    bella 45 f
    ', tx); - t.end(); -}); - - -test('table headers', function (t) { - const tx = '|_. name |_. age |_. sex |\n\ -| joan | 24 | f |\n\ -| archie | 29 | m |\n\ -| bella | 45 | f |'; - t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
    name age sex
    joan 24 f
    archie 29 m
    bella 45 f
    ', tx); - t.end(); -}); - - -test('table cell attributes', function (t) { - const tx = '|_. attribute list |\n\ -|<. align left |\n\ -|>. align right|\n\ -|=. center |\n\ -|<>. justify |\n\ -|^. valign top |\n\ -|~. bottom |'; - t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -
    attribute list
    align left
    align right
    center
    justify
    valign top
    bottom
    ', tx); - t.end(); -}); - - -test('table colspan', function (t) { - const tx = '|\\2. spans two cols |\n\ -| col 1 | col 2 |'; - t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
    spans two cols
    col 1 col 2
    ', tx); - t.end(); -}); - - -test('table rowspan', function (t) { - const tx = '|/3. spans 3 rows | a |\n\ -| b |\n\ -| c |'; - t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -
    spans 3 rows a
    b
    c
    ', tx); - t.end(); -}); - - -test('block attributes applied to table cells', function (t) { +test('tables', t => { + const tx = `| name | age | sex | +| joan | 24 | f | +| archie | 29 | m | +| bella | 45 | f |`; + t.is(textile.convert(tx), + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
    name age sex
    joan 24 f
    archie 29 m
    bella 45 f
    `, tx); + t.end(); +}); + + +test('table headers', t => { + const tx = `|_. name |_. age |_. sex | +| joan | 24 | f | +| archie | 29 | m | +| bella | 45 | f |`; + t.is(textile.convert(tx), + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
    name age sex
    joan 24 f
    archie 29 m
    bella 45 f
    `, tx); + t.end(); +}); + + +test('table cell attributes', t => { + const tx = `|_. attribute list | +|<. align left | +|>. align right| +|=. center | +|<>. justify | +|^. valign top | +|~. bottom |`; + t.is(textile.convert(tx), + ` +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +
    attribute list
    align left
    align right
    center
    justify
    valign top
    bottom
    `, tx); + t.end(); +}); + + +test('table colspan', t => { + const tx = `|\\2. spans two cols | +| col 1 | col 2 |`; + t.is(textile.convert(tx), + ` +\t +\t\t +\t +\t +\t\t +\t\t +\t +
    spans two cols
    col 1 col 2
    `, tx); + t.end(); +}); + + +test('table rowspan', t => { + const tx = `|/3. spans 3 rows | a | +| b | +| c |`; + t.is(textile.convert(tx), + ` +\t +\t\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +
    spans 3 rows a
    b
    c
    `, tx); + t.end(); +}); + + +test('block attributes applied to table cells', t => { const tx = '|{background:#ddd}. Grey cell|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -
    Grey cell
    ', tx); + ` +\t +\t\t +\t +
    Grey cell
    `, tx); t.end(); }); -test('block attributes applied to a table', function (t) { - const tx = 'table{border:1px solid black}.\n\ -|This|is|a|row|\n\ -|This|is|a|row|'; +test('block attributes applied to a table', t => { + const tx = `table{border:1px solid black}. +|This|is|a|row| +|This|is|a|row|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
    Thisisarow
    Thisisarow
    ', tx); + ` +\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t +
    Thisisarow
    Thisisarow
    `, tx); t.end(); }); -test('block attributes applied to a table row', function (t) { - const tx = '|This|is|a|row|\n\ -{background:#ddd}. |This|is|grey|row|'; +test('block attributes applied to a table row', t => { + const tx = `|This|is|a|row| +{background:#ddd}. |This|is|grey|row|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
    Thisisarow
    Thisisgreyrow
    ', tx); + ` +\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t +
    Thisisarow
    Thisisgreyrow
    `, tx); t.end(); }); -test('extended block followed by pre block', function (t) { - const tx = 'div.. Just a test.\n\n\ -Second div.\n\n\ -pre. A pre block ends it.'; +test('extended block followed by pre block', t => { + const tx = `div.. Just a test. + +Second div. + +pre. A pre block ends it.`; t.is(textile.convert(tx), - '
    Just a test.
    \n\ -
    Second div.
    \n\ -
    A pre block ends it.
    ', tx); + `
    Just a test.
    +
    Second div.
    +
    A pre block ends it.
    `, tx); t.end(); }); -test('extended block followed by blockquote', function (t) { - const tx = 'div.. Just a test.\n\n\ -Second div.\n\n\ -bq. A blockquote ends it.'; +test('extended block followed by blockquote', t => { + const tx = `div.. Just a test. + +Second div. + +bq. A blockquote ends it.`; t.is(textile.convert(tx), - '
    Just a test.
    \n\ -
    Second div.
    \n\ -
    \n\ -

    A blockquote ends it.

    \n\ -
    ', tx); + `
    Just a test.
    +
    Second div.
    +
    +

    A blockquote ends it.

    +
    `, tx); t.end(); }); -test('extended block followed by block code', function (t) { - const tx = 'div.. Just a test.\n\n\ -Second div.\n\n\ -bc. A blockcode ends it.'; +test('extended block followed by block code', t => { + const tx = `div.. Just a test. + +Second div. + +bc. A blockcode ends it.`; t.is(textile.convert(tx), - '
    Just a test.
    \n\ -
    Second div.
    \n\ -
    A blockcode ends it.
    ', tx); + `
    Just a test.
    +
    Second div.
    +
    A blockcode ends it.
    `, tx); t.end(); }); -test('extended block followed by notextile block', function (t) { - const tx = 'div.. Just a test.\n\n\ -Second div.\n\n\ -notextile. A notextile block ends it.'; +test('extended block followed by notextile block', t => { + const tx = `div.. Just a test. + +Second div. + +notextile. A notextile block ends it.`; t.is(textile.convert(tx), - '
    Just a test.
    \n\ -
    Second div.
    \n\ -A notextile block ends it.', tx); + `
    Just a test.
    +
    Second div.
    +A notextile block ends it.`, tx); t.end(); }); -test('simple parentheses', function (t) { +test('simple parentheses', t => { const tx = 'before (in parens) after'; t.is(textile.convert(tx), '

    before (in parens) after

    ', tx); @@ -1026,7 +1053,7 @@ test('simple parentheses', function (t) { }); -test('parentheses in underscores', function (t) { +test('parentheses in underscores', t => { const tx = 'before _(in parens)_ after'; t.is(textile.convert(tx), '

    before (in parens) after

    ', tx); @@ -1034,7 +1061,7 @@ test('parentheses in underscores', function (t) { }); -test('parentheses in asterisks', function (t) { +test('parentheses in asterisks', t => { const tx = 'before *(in parens)* after'; t.is(textile.convert(tx), '

    before (in parens) after

    ', tx); @@ -1042,7 +1069,7 @@ test('parentheses in asterisks', function (t) { }); -test('parentheses in underscores in quotes', function (t) { +test('parentheses in underscores in quotes', t => { const tx = '"before _(in parens)_ after"'; t.is(textile.convert(tx), '

    “before (in parens) after”

    ', tx); @@ -1050,7 +1077,7 @@ test('parentheses in underscores in quotes', function (t) { }); -test('underscores in parentheses', function (t) { +test('underscores in parentheses', t => { const tx = 'one _two three_ (four _five six_) seven'; t.is(textile.convert(tx), '

    one two three (four five six) seven

    ', tx); @@ -1058,7 +1085,7 @@ test('underscores in parentheses', function (t) { }); -test('underscores in parentheses in quotes', function (t) { +test('underscores in parentheses in quotes', t => { const tx = '"one _two three_ (four _five six_) seven"'; t.is(textile.convert(tx), '

    “one two three (four five six) seven”

    ', tx); @@ -1066,7 +1093,7 @@ test('underscores in parentheses in quotes', function (t) { }); -test('underscores in parentheses 2', function (t) { +test('underscores in parentheses 2', t => { const tx = 'one (two _three four_) five'; t.is(textile.convert(tx), '

    one (two three four) five

    ', tx); @@ -1074,7 +1101,7 @@ test('underscores in parentheses 2', function (t) { }); -test('underscores in parentheses in quotes 2', function (t) { +test('underscores in parentheses in quotes 2', t => { const tx = '"one (two _three four_) five"'; t.is(textile.convert(tx), '

    “one (two three four) five”

    ', tx); @@ -1082,7 +1109,7 @@ test('underscores in parentheses in quotes 2', function (t) { }); -test('caps in parentheses', function (t) { +test('caps in parentheses', t => { const tx = 'IBM or (HAL)'; t.is(textile.convert(tx), '

    IBM or (HAL)

    ', tx); @@ -1090,77 +1117,85 @@ test('caps in parentheses', function (t) { }); -test('phrase modifiers in parentheses', function (t) { - const tx = '__Amanita__s are mushrooms.\n\ -Lungworts (__Lobaria__) are lichens.\n\ -Blah blah (normal text **bold**) blah.'; +test('phrase modifiers in parentheses', t => { + const tx = `__Amanita__s are mushrooms. +Lungworts (__Lobaria__) are lichens. +Blah blah (normal text **bold**) blah.`; t.is(textile.convert(tx), - '

    __Amanita__s are mushrooms.
    \n\ -Lungworts (Lobaria) are lichens.
    \n\ -Blah blah (normal text bold) blah.

    ', tx); + `

    __Amanita__s are mushrooms.
    +Lungworts (Lobaria) are lichens.
    +Blah blah (normal text bold) blah.

    `, tx); t.end(); }); -test('square brackets are preserved', function (t) { - const tx = 'citation ["(Berk.) Hilton"], see\n\ -[Papers "blah blah."]'; +test('square brackets are preserved', t => { + const tx = `citation ["(Berk.) Hilton"], see +[Papers "blah blah."]`; t.is(textile.convert(tx), - '

    citation [“(Berk.) Hilton”], see
    \n\ -[Papers “blah blah.”]

    ', tx); + `

    citation [“(Berk.) Hilton”], see
    +[Papers “blah blah.”]

    `, tx); t.end(); }); -test('horizontal rule using asterisks', function (t) { - const tx = 'Just some *** text\n\n\ -***\n\n\ -Some more text.'; +test('horizontal rule using asterisks', t => { + const tx = `Just some *** text + +*** + +Some more text.`; t.is(textile.convert(tx), - '

    Just some *** text

    \n\ -
    \n\ -

    Some more text.

    ', tx); + `

    Just some *** text

    +
    +

    Some more text.

    `, tx); t.end(); }); -test('horizontal rule using more than three asterisks', function (t) { - const tx = 'Just some **** text\n\n\ -****\n\n\ -Some more text.'; +test('horizontal rule using more than three asterisks', t => { + const tx = `Just some **** text + +**** + +Some more text.`; t.is(textile.convert(tx), - '

    Just some **** text

    \n\ -
    \n\ -

    Some more text.

    ', tx); + `

    Just some **** text

    +
    +

    Some more text.

    `, tx); t.end(); }); -test('horizontal rule using dashes', function (t) { - const tx = 'Just some --- text\n\n\ ----\n\n\ -Some more text.'; +test('horizontal rule using dashes', t => { + const tx = `Just some --- text + +--- + +Some more text.`; t.is(textile.convert(tx), - '

    Just some --- text

    \n\ -
    \n\ -

    Some more text.

    ', tx); + `

    Just some --- text

    +
    +

    Some more text.

    `, tx); t.end(); }); -test('horizontal rule using underscores', function (t) { - const tx = 'Just some ___ text\n\n\ -___\n\n\ -Some more text.'; +test('horizontal rule using underscores', t => { + const tx = `Just some ___ text + +___ + +Some more text.`; t.is(textile.convert(tx), - '

    Just some ___ text

    \n\ -
    \n\ -

    Some more text.

    ', tx); + `

    Just some ___ text

    +
    +

    Some more text.

    `, tx); t.end(); }); -test('lang attribute cannot contain square brackets', function (t) { +test('lang attribute cannot contain square brackets', t => { const tx = 'some @[[code]]@'; t.is(textile.convert(tx), '

    some [[code]]

    ', tx); @@ -1168,33 +1203,33 @@ test('lang attribute cannot contain square brackets', function (t) { }); -test('pre blocks preserve leading whitespace', function (t) { - const tx = 'pre. Text in a pre block\n\ -is displayed in a fixed-width\n\ - font. It preserves\n\ - s p a c e s, line breaks\n\ - and ascii bunnies.'; +test('pre blocks preserve leading whitespace', t => { + const tx = `pre. Text in a pre block +is displayed in a fixed-width + font. It preserves + s p a c e s, line breaks + and ascii bunnies.`; t.is(textile.convert(tx), - '
         Text in a pre block\n\
    -is displayed in a fixed-width\n\
    -     font. It preserves\n\
    -  s p a c e s, line breaks\n\
    -     and ascii bunnies.
    ', tx); + `
         Text in a pre block
    +is displayed in a fixed-width
    +     font. It preserves
    +  s p a c e s, line breaks
    +     and ascii bunnies.
    `, tx); t.end(); }); -test('code blocks preserve leading whitespace', function (t) { - const tx = 'bc. false\n\ -} else {'; +test('code blocks preserve leading whitespace', t => { + const tx = `bc. false +} else {`; t.is(textile.convert(tx), - '
      false\n\
    -} else {
    ', tx); + `
      false
    +} else {
    `, tx); t.end(); }); -test('citation ending with question mark', function (t) { +test('citation ending with question mark', t => { const tx = '??What the Story Morning Glory???'; t.is(textile.convert(tx), '

    What the Story Morning Glory?

    ', tx); @@ -1202,7 +1237,7 @@ test('citation ending with question mark', function (t) { }); -test('citation including question mark', function (t) { +test('citation including question mark', t => { const tx = "??What's the Matter with Kansas? How Conservatives Won the Heart of America?? is a great book!"; t.is(textile.convert(tx), '

    What’s the Matter with Kansas? How Conservatives Won the Heart of America is a great book!

    ', tx); @@ -1210,17 +1245,17 @@ test('citation including question mark', function (t) { }); -test('emphasized word including underscore', function (t) { - const tx = '_trythis_ it will keep the empahsis.\n\ -_and_this_too_ it should keep the emphasis but does not with redcloth.'; +test('emphasized word including underscore', t => { + const tx = `_trythis_ it will keep the empahsis. +_and_this_too_ it should keep the emphasis but does not with redcloth.`; t.is(textile.convert(tx), - '

    trythis it will keep the empahsis.
    \n\ -and_this_too it should keep the emphasis but does not with redcloth.

    ', tx); + `

    trythis it will keep the empahsis.
    +and_this_too it should keep the emphasis but does not with redcloth.

    `, tx); t.end(); }); -test('code captures spaces when made explicit with square brackets', function (t) { +test('code captures spaces when made explicit with square brackets', t => { const tx = "Start a paragraph with [@p. @] (that's p, a period, and a space)."; t.is(textile.convert(tx), '

    Start a paragraph with p. (that’s p, a period, and a space).

    ', tx); @@ -1228,7 +1263,7 @@ test('code captures spaces when made explicit with square brackets', function (t }); -test('unrecognized block starting with t not eaten', function (t) { +test('unrecognized block starting with t not eaten', t => { const tx = 'tel. 0 700 123 123'; t.is(textile.convert(tx), '

    tel. 0 700 123 123

    ', tx); @@ -1236,7 +1271,7 @@ test('unrecognized block starting with t not eaten', function (t) { }); -test('bolded number at start of phrase', function (t) { +test('bolded number at start of phrase', t => { const tx = '*22 watermelons* is my limit'; t.is(textile.convert(tx), '

    22 watermelons is my limit

    ', tx); @@ -1244,7 +1279,7 @@ test('bolded number at start of phrase', function (t) { }); -test('bolded paragraph', function (t) { +test('bolded paragraph', t => { const tx = '*- I would expect it to be a bolded paragraph.*'; t.is(textile.convert(tx), '

    - I would expect it to be a bolded paragraph.

    ', tx); diff --git a/test/block_comments.js b/test/block_comments.js index ba2da73..4a12e48 100644 --- a/test/block_comments.js +++ b/test/block_comments.js @@ -1,45 +1,56 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // block_comments.yml -test('Textile comments', function (t) { - const tx = "###. Here's a comment.\n\n\ -h3. Hello\n\n\ -###. And\n\ -another\n\ -one.\n\n\ -Goodbye.\n\ -"; +test('Textile comments', t => { + const tx = `###. Here's a comment. + +h3. Hello + +###. And +another +one. + +Goodbye. +`; t.is(textile.convert(tx), - '

    Hello

    \n\n\ -

    Goodbye.

    ', tx); + `

    Hello

    + +

    Goodbye.

    `, tx); t.end(); }); -test('Textile comments', function (t) { - const tx = 'Some text here.\n\n\ -###. This is a textile comment block.\n\ -It will be removed from your document.\n\n\ -More text to follow.\n\ -'; +test('Textile comments', t => { + const tx = `Some text here. + +###. This is a textile comment block. +It will be removed from your document. + +More text to follow. +`; t.is(textile.convert(tx), - '

    Some text here.

    \n\n\ -

    More text to follow.

    ', tx); + `

    Some text here.

    + +

    More text to follow.

    `, tx); t.end(); }); -test('Textile comments extended', function (t) { - const tx = 'Some text here.\n\n\ -###.. This is a textile comment block.\n\ -It will be removed from your document.\n\n\ -This is also a comment.\n\n\ -p. More text to follow.\n\ -'; +test('Textile comments extended', t => { + const tx = `Some text here. + +###.. This is a textile comment block. +It will be removed from your document. + +This is also a comment. + +p. More text to follow. +`; t.is(textile.convert(tx), - '

    Some text here.

    \n\n\ -

    More text to follow.

    ', tx); + `

    Some text here.

    + +

    More text to follow.

    `, tx); t.end(); }); diff --git a/test/blocks-and-html.js b/test/blocks-and-html.js index 34915bc..26b41c0 100644 --- a/test/blocks-and-html.js +++ b/test/blocks-and-html.js @@ -1,5 +1,5 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; /* @@ -22,7 +22,7 @@ A

    `; }); -test('An auto-paragraph', function (t) { +test('An auto-paragraph', t => { const tx = `A paragraph. Another paragraph.`; @@ -32,7 +32,7 @@ Another paragraph.`; }); -test('Intra-block line breaks', function (t) { +test('Intra-block line breaks', t => { const tx = `A paragraph with a line break.`; const op = `

    A paragraph with
    diff --git a/test/definitions.js b/test/definitions.js index ad4fe8f..f9f0dd8 100644 --- a/test/definitions.js +++ b/test/definitions.js @@ -1,90 +1,95 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // definitions.yml -test('redcloth definition list', function (t) { - const tx = 'here is a RedCloth definition list:\n\n\ -- yes := no\n\ -- no:=no\n\ -- maybe:= yes'; +test('redcloth definition list', t => { + const tx = `here is a RedCloth definition list: + +- yes := no +- no:=no +- maybe:= yes`; t.is(textile.convert(tx), - '

    here is a RedCloth definition list:

    \n\ -
    \n\ -\t
    yes
    \n\ -\t
    no
    \n\ -\t
    no
    \n\ -\t
    no
    \n\ -\t
    maybe
    \n\ -\t
    yes
    \n\ -
    ', tx); + `

    here is a RedCloth definition list:

    +
    +\t
    yes
    +\t
    no
    +\t
    no
    +\t
    no
    +\t
    maybe
    +\t
    yes
    +
    `, tx); t.end(); }); -test('with line breaks', function (t) { - const tx = '- term := you can have line breaks\n\ -just like other lists\n\ -- line-spanning\n\ -term := hey, slick!'; +test('with line breaks', t => { + const tx = `- term := you can have line breaks +just like other lists +- line-spanning +term := hey, slick!`; t.is(textile.convert(tx), - '
    \n\ -\t
    term
    \n\ -\t
    you can have line breaks
    \n\ -just like other lists
    \n\ -\t
    line-spanning
    \n\ -term
    \n\ -\t
    hey, slick!
    \n\ -
    ', tx); + `
    +\t
    term
    +\t
    you can have line breaks
    +just like other lists
    +\t
    line-spanning
    +term
    +\t
    hey, slick!
    +
    `, tx); t.end(); }); -test('double terms', function (t) { - const tx = 'You can have multiple terms before a definition:\n\n\ -- textile\n\ -- fabric\n\ -- cloth := woven threads'; +test('double terms', t => { + const tx = `You can have multiple terms before a definition: + +- textile +- fabric +- cloth := woven threads`; t.is(textile.convert(tx), - '

    You can have multiple terms before a definition:

    \n\ -
    \n\ -\t
    textile
    \n\ -\t
    fabric
    \n\ -\t
    cloth
    \n\ -\t
    woven threads
    \n\ -
    ', tx); + `

    You can have multiple terms before a definition:

    +
    +\t
    textile
    +\t
    fabric
    +\t
    cloth
    +\t
    woven threads
    +
    `, tx); t.end(); }); -test('not a definition list', function (t) { - const tx = '- textile\n\ -- fabric\n\ -- cloth'; +test('not a definition list', t => { + const tx = `- textile +- fabric +- cloth`; t.is(textile.convert(tx), - '

    - textile
    \n\ -- fabric
    \n\ -- cloth

    ', tx); + `

    - textile
    +- fabric
    +- cloth

    `, tx); t.end(); }); -test('long definition list', function (t) { - const tx = 'here is a long definition\n\n\ -- some term := \n\ -*sweet*\n\n\ -yes\n\n\ -ok =:\n\ -- regular term := no'; +test('long definition list', t => { + const tx = `here is a long definition + +- some term := +*sweet* + +yes + +ok =: +- regular term := no`; t.is(textile.convert(tx), - '

    here is a long definition

    \n\ -
    \n\ -\t
    some term
    \n\ -\t

    sweet

    \n\ -

    yes

    \n\ -

    ok

    \n\ -\t
    regular term
    \n\ -\t
    no
    \n\ -
    ', tx); + `

    here is a long definition

    +
    +\t
    some term
    +\t

    sweet

    +

    yes

    +

    ok

    +\t
    regular term
    +\t
    no
    +
    `, tx); t.end(); }); diff --git a/test/extra_whitespace.js b/test/extra_whitespace.js index 2b32fda..88974fe 100644 --- a/test/extra_whitespace.js +++ b/test/extra_whitespace.js @@ -1,43 +1,49 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // extra_whitespace.yml -test('header with 1 blank line below', function (t) { - const tx = 'h1. Header\n\n\ -text'; +test('header with 1 blank line below', t => { + const tx = `h1. Header + +text`; t.is(textile.convert(tx), - '

    Header

    \n\ -

    text

    ', tx); + `

    Header

    +

    text

    `, tx); t.end(); }); -test('header with 2 blank lines below', function (t) { - const tx = 'h1. Header\n\n\n\ -text'; +test('header with 2 blank lines below', t => { + const tx = `h1. Header + + +text`; t.is(textile.convert(tx), - '

    Header

    \n\ -

    text

    ', tx); + `

    Header

    +

    text

    `, tx); t.end(); }); -test('header with 1 blank line above', function (t) { - const tx = 'text\n\n\ -h1. Header'; +test('header with 1 blank line above', t => { + const tx = `text + +h1. Header`; t.is(textile.convert(tx), - '

    text

    \n\ -

    Header

    ', tx); + `

    text

    +

    Header

    `, tx); t.end(); }); -test('header with 2 blank lines above', function (t) { - const tx = 'text\n\n\n\ -h1. Header'; +test('header with 2 blank lines above', t => { + const tx = `text + + +h1. Header`; t.is(textile.convert(tx), - '

    text

    \n\ -

    Header

    ', tx); + `

    text

    +

    Header

    `, tx); t.end(); }); diff --git a/test/filter_pba.js b/test/filter_pba.js index 3629159..d6e1470 100644 --- a/test/filter_pba.js +++ b/test/filter_pba.js @@ -1,15 +1,15 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // filter_pba.yml -test('correct application of double quote entity when using styles', function (t) { +test('correct application of double quote entity when using styles', t => { const tx = 'p{background: #white url("../chunky_bacon.jpg")}. The quick brown "cartoon" fox jumps over the lazy dog'; t.is(textile.convert(tx), '

    The quick brown “cartoon” fox jumps over the lazy dog

    ', tx); t.end(); }); -test('correct application of single quote entity when using styles', function (t) { +test('correct application of single quote entity when using styles', t => { const tx = "p{background: #white url('../chunky_bacon.jpg')}. The quick brown 'cartoon' fox jumps over the lazy dog"; t.is(textile.convert(tx), '

    The quick brown ‘cartoon’ fox jumps over the lazy dog

    ', tx); diff --git a/test/html.js b/test/html.js index 90b02e1..6d58b6b 100644 --- a/test/html.js +++ b/test/html.js @@ -1,8 +1,8 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // html.yml -test('html:1', function (t) { +test('html:1', t => { const tx = '*this is strong*'; t.is(textile.convert(tx), '

    this is strong

    ', tx); @@ -10,7 +10,7 @@ test('html:1', function (t) { }); -test('html:2', function (t) { +test('html:2', t => { const tx = '*this test is strong*'; t.is(textile.convert(tx), '

    this test is strong

    ', tx); @@ -18,7 +18,7 @@ test('html:2', function (t) { }); -test('html:3', function (t) { +test('html:3', t => { const tx = 'A simple '; t.is(textile.convert(tx), '

    A simple

    ', tx); @@ -26,7 +26,7 @@ test('html:3', function (t) { }); -test('html:4', function (t) { +test('html:4', t => { const tx = 'A simple '; t.is(textile.convert(tx), '

    A simple

    ', tx); @@ -57,55 +57,63 @@ if you break.\n\ */ -test('line breaks', function (t) { - const tx = 'I spoke.
    \n\ -And none replied.'; +test('line breaks', t => { + const tx = `I spoke.
    +And none replied.`; t.is(textile.convert(tx), - '

    I spoke.
    \n\ -And none replied.

    ', tx); + `

    I spoke.
    +And none replied.

    `, tx); t.end(); }); -test('mixing of textile and XHTML', function (t) { - const tx = 'test\n\n\ -Regular *paragraph*.\n\n\ -
    \n\ -This is one paragraph.\n\n\ -This is another.\n\n\ -!an/image.jpg!\n\n\ -* A list\n\ -* in a div.\n\n\ -
    \n\n\ -Another paragraph.'; +test('mixing of textile and XHTML', t => { + const tx = `test + +Regular *paragraph*. + +
    +This is one paragraph. + +This is another. + +!an/image.jpg! + +* A list +* in a div. + +
    + +Another paragraph.`; t.is(textile.convert(tx), - '

    test

    \n\ -

    Regular paragraph.

    \n\ -
    \n\ -

    This is one paragraph.

    \n\ -

    This is another.

    \n\ -

    \n\ -
      \n\ -\t
    • A list
    • \n\ -\t
    • in a div.
    • \n\ -
    \n\ -
    \n\ -

    Another paragraph.

    ', tx); + `

    test

    +

    Regular paragraph.

    +
    +

    This is one paragraph.

    +

    This is another.

    +

    +
      +\t
    • A list
    • +\t
    • in a div.
    • +
    +
    +

    Another paragraph.

    `, tx); t.end(); }); -test('mixing of textile and XHTML', function (t) { - const tx = 'test\n\n\ -Regular *paragraph*.'; +test('mixing of textile and XHTML', t => { + const tx = `test + +Regular *paragraph*.`; t.is(textile.convert(tx), - '

    test

    \n\ -

    Regular paragraph.

    ', tx); + `

    test

    +

    Regular paragraph.

    `, tx); t.end(); }); -test('wraps inline HTML in paragraphs', function (t) { +test('wraps inline HTML in paragraphs', t => { const tx = 'asd blabla "google":http://google.com'; t.is(textile.convert(tx), '

    asd blabla google

    ', tx); @@ -113,7 +121,7 @@ test('wraps inline HTML in paragraphs', function (t) { }); -test('self closing XHTML with following text not recognized', function (t) { +test('self closing XHTML with following text not recognized', t => { const tx = '
    this has been a horizontal rule'; t.is(textile.convert(tx), '


    this has been a horizontal rule

    ', tx); @@ -121,7 +129,7 @@ test('self closing XHTML with following text not recognized', function (t) { }); -test('self closing HTML with following text not recognized', function (t) { +test('self closing HTML with following text not recognized', t => { const tx = '
    that was a horizontal rule too'; t.is(textile.convert(tx), '


    that was a horizontal rule too

    ', tx); @@ -129,17 +137,18 @@ test('self closing HTML with following text not recognized', function (t) { }); -test('preserves block html', function (t) { - const tx = '
    123 Anystreet
    \n\n\ -

    Explicit paragraph

    '; +test('preserves block html', t => { + const tx = `
    123 Anystreet
    + +

    Explicit paragraph

    `; t.is(textile.convert(tx), - '
    123 Anystreet
    \n\ -

    Explicit paragraph

    ', tx); + `
    123 Anystreet
    +

    Explicit paragraph

    `, tx); t.end(); }); -test('preserves empty block standalone elements', function (t) { +test('preserves empty block standalone elements', t => { const tx = '
    '; t.is(textile.convert(tx), '
    ', tx); @@ -170,76 +179,86 @@ More div text.", tx ); }); */ -test('complex example from real life', function (t) { - const tx = '
    \n\ -
    \n\n\ -
    \n\ -h1. Contact\n\n\ -Please contact us if you have questions or need help making arrangements.\n\n\ -
    \n\ -
    \n\n\ -
    \n\ -h2. Tom\n\n\ -(540) 555-1212\n\n\ -h3. Jerry\n\n\ -(540) 555-1234\n\n\ -
    '; +test('complex example from real life', t => { + const tx = `
    +
    + +
    +h1. Contact + +Please contact us if you have questions or need help making arrangements. + +
    +
    + +
    +h2. Tom + +(540) 555-1212 + +h3. Jerry + +(540) 555-1234 + +
    `; t.is(textile.convert(tx), - '
    \n\ -
    \n\ -
    \n\ -

    Contact

    \n\ -

    Please contact us if you have questions or need help making arrangements.

    \n\ -
    \n\ -
    \n\ -
    \n\ -

    Tom

    \n\ -

    (540) 555-1212

    \n\ -

    Jerry

    \n\ -

    (540) 555-1234

    \n\ -
    ', tx); + `
    +
    +
    +

    Contact

    +

    Please contact us if you have questions or need help making arrangements.

    +
    +
    +
    +

    Tom

    +

    (540) 555-1212

    +

    Jerry

    +

    (540) 555-1234

    +
    `, tx); t.end(); }); -test('HTML end tag can end blockquote', function (t) { - const tx = '
    \n\ -bq. This is a blockquote.\n\ -
    '; +test('HTML end tag can end blockquote', t => { + const tx = `
    +bq. This is a blockquote. +
    `; t.is(textile.convert(tx), - '
    \n\ -bq. This is a blockquote.\n\ -
    ', tx); + `
    +bq. This is a blockquote. +
    `, tx); t.end(); }); // BT: this disagrees with PHP which emits:

    \n... -test('before table does not affect table', function (t) { - const tx = '
    \n\n\ -h2. heading\n\n\ -|a|b|c|\n\ -|d|e|f|'; +test('before table does not affect table', t => { + const tx = `
    + +h2. heading + +|a|b|c| +|d|e|f|`; t.is(textile.convert(tx), - '

    <div>

    \n\ -

    heading

    \n\ -\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
    abc
    def
    ', tx); + `

    <div>

    +

    heading

    + +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
    abc
    def
    `, tx); t.end(); }); -test('tilde in innerHTML is not altered', function (t) { +test('tilde in innerHTML is not altered', t => { const tx = 'http://foo.com/bar?something=1~2~3'; t.is(textile.convert(tx), '

    http://foo.com/bar?something=1~2~3

    ', tx); @@ -247,7 +266,7 @@ test('tilde in innerHTML is not altered', function (t) { }); -test('empty block', function (t) { +test('empty block', t => { const tx = '
    '; t.is(textile.convert(tx), '
    ', tx); @@ -255,7 +274,7 @@ test('empty block', function (t) { }); -test('in code escaped properly', function (t) { +test('in code escaped properly', t => { const tx = '
    some bold text
    '; t.is(textile.convert(tx), '
    some <b>bold</b> text
    ', tx); @@ -263,7 +282,7 @@ test('in code escaped properly', function (t) { }); -test('in code with class attribute escaped properly', function (t) { +test('in code with class attribute escaped properly', t => { const tx = "
    some bold text
    "; t.is(textile.convert(tx), '
    some <b>bold</b> text
    ', tx); @@ -271,7 +290,7 @@ test('in code with class attribute escaped properly', function (t) { }); -test('notextile beginning the line', function (t) { +test('notextile beginning the line', t => { const tx = 'Sir Bobby Robson, is a famous footballer'; t.is(textile.convert(tx), '

    Sir Bobby Robson, is a famous footballer

    ', tx); diff --git a/test/images.js b/test/images.js index dfd4508..9958e87 100644 --- a/test/images.js +++ b/test/images.js @@ -1,8 +1,8 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // images.yml -test('images:1', function (t) { +test('images:1', t => { const tx = 'This is an !image.jpg!'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -10,7 +10,7 @@ test('images:1', function (t) { }); -test('images:2', function (t) { +test('images:2', t => { const tx = 'This is an !image.jpg(with alt text)!'; t.is(textile.convert(tx), '

    This is an with alt text

    ', tx); @@ -18,7 +18,7 @@ test('images:2', function (t) { }); -test('images:3', function (t) { +test('images:3', t => { const tx = 'This is an !http://example.com/i/image.jpg!'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -26,7 +26,7 @@ test('images:3', function (t) { }); -test('images:4', function (t) { +test('images:4', t => { const tx = 'This is an !http://example.com/i/image.jpg#a1!'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -34,7 +34,7 @@ test('images:4', function (t) { }); -test('images:5', function (t) { +test('images:5', t => { const tx = 'This is an !image.jpg!.'; t.is(textile.convert(tx), '

    This is an .

    ', tx); @@ -42,7 +42,7 @@ test('images:5', function (t) { }); -test('images:6', function (t) { +test('images:6', t => { const tx = 'This is an !image.jpg(with alt text)!.'; t.is(textile.convert(tx), '

    This is an with alt text.

    ', tx); @@ -50,7 +50,7 @@ test('images:6', function (t) { }); -test('images:7', function (t) { +test('images:7', t => { const tx = 'This is an !http://example.com/i/image.jpg!.'; t.is(textile.convert(tx), '

    This is an .

    ', tx); @@ -58,7 +58,7 @@ test('images:7', function (t) { }); -test('images:8', function (t) { +test('images:8', t => { const tx = 'This is an !http://example.com/i/image.jpg#a1!.'; t.is(textile.convert(tx), '

    This is an .

    ', tx); @@ -66,7 +66,7 @@ test('images:8', function (t) { }); -test('images:9', function (t) { +test('images:9', t => { const tx = 'This is not an image!!!'; t.is(textile.convert(tx), '

    This is not an image!!!

    ', tx); @@ -74,7 +74,7 @@ test('images:9', function (t) { }); -test('images:10', function (t) { +test('images:10', t => { const tx = 'This is not an! image!'; t.is(textile.convert(tx), '

    This is not an! image!

    ', tx); @@ -82,7 +82,7 @@ test('images:10', function (t) { }); -test('images:11', function (t) { +test('images:11', t => { const tx = 'This is an !http://example.com/i/image.jpg!:#1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -90,7 +90,7 @@ test('images:11', function (t) { }); -test('images:12', function (t) { +test('images:12', t => { const tx = 'This is an !http://example.com/i/image.jpg!:#a'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -98,7 +98,7 @@ test('images:12', function (t) { }); -test('images:13', function (t) { +test('images:13', t => { const tx = 'This is an !http://example.com/i/image.jpg!:#a1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -106,7 +106,7 @@ test('images:13', function (t) { }); -test('images:14', function (t) { +test('images:14', t => { const tx = 'This is an !http://example.com/i/image.jpg!:#a10'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -114,7 +114,7 @@ test('images:14', function (t) { }); -test('images:15', function (t) { +test('images:15', t => { const tx = 'This is an !http://example.com/i/image.jpg!:index.html'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -122,7 +122,7 @@ test('images:15', function (t) { }); -test('images:16', function (t) { +test('images:16', t => { const tx = 'This is an !http://example.com/i/image.jpg!:index.html#1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -130,7 +130,7 @@ test('images:16', function (t) { }); -test('images:17', function (t) { +test('images:17', t => { const tx = 'This is an !http://example.com/i/image.jpg!:index.html#a1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -138,7 +138,7 @@ test('images:17', function (t) { }); -test('images:18', function (t) { +test('images:18', t => { const tx = 'This is an !http://example.com/i/image.jpg!:index.html#a10'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -146,7 +146,7 @@ test('images:18', function (t) { }); -test('images:19', function (t) { +test('images:19', t => { const tx = 'This is an !http://example.com/i/image.jpg!:index.html?foo=bar'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -154,7 +154,7 @@ test('images:19', function (t) { }); -test('images:20', function (t) { +test('images:20', t => { const tx = 'This is an !http://example.com/i/image.jpg!:index.html?foo=bar#1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -162,7 +162,7 @@ test('images:20', function (t) { }); -test('images:21', function (t) { +test('images:21', t => { const tx = 'This is an !http://example.com/i/image.jpg!:index.html?foo=bar#a'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -170,7 +170,7 @@ test('images:21', function (t) { }); -test('images:22', function (t) { +test('images:22', t => { const tx = 'This is an !http://example.com/i/image.jpg!:index.html?foo=bar#a1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -178,7 +178,7 @@ test('images:22', function (t) { }); -test('images:23', function (t) { +test('images:23', t => { const tx = 'This is an !http://example.com/i/image.jpg!:index.html?foo=bar#a10'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -186,7 +186,7 @@ test('images:23', function (t) { }); -test('images:24', function (t) { +test('images:24', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -194,7 +194,7 @@ test('images:24', function (t) { }); -test('images:25', function (t) { +test('images:25', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/#1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -202,7 +202,7 @@ test('images:25', function (t) { }); -test('images:26', function (t) { +test('images:26', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/#a'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -210,7 +210,7 @@ test('images:26', function (t) { }); -test('images:27', function (t) { +test('images:27', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/#a1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -218,7 +218,7 @@ test('images:27', function (t) { }); -test('images:28', function (t) { +test('images:28', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/#a10'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -226,7 +226,7 @@ test('images:28', function (t) { }); -test('images:29', function (t) { +test('images:29', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -234,7 +234,7 @@ test('images:29', function (t) { }); -test('images:30', function (t) { +test('images:30', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html#1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -242,7 +242,7 @@ test('images:30', function (t) { }); -test('images:31', function (t) { +test('images:31', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html#a'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -250,7 +250,7 @@ test('images:31', function (t) { }); -test('images:32', function (t) { +test('images:32', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html#a1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -258,7 +258,7 @@ test('images:32', function (t) { }); -test('images:33', function (t) { +test('images:33', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html#a10'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -266,7 +266,7 @@ test('images:33', function (t) { }); -test('images:34', function (t) { +test('images:34', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -274,7 +274,7 @@ test('images:34', function (t) { }); -test('images:35', function (t) { +test('images:35', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar#1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -282,7 +282,7 @@ test('images:35', function (t) { }); -test('images:36', function (t) { +test('images:36', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar#a'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -290,7 +290,7 @@ test('images:36', function (t) { }); -test('images:37', function (t) { +test('images:37', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar#a1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -298,7 +298,7 @@ test('images:37', function (t) { }); -test('images:38', function (t) { +test('images:38', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar#a10'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -306,7 +306,7 @@ test('images:38', function (t) { }); -test('images:39', function (t) { +test('images:39', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -314,7 +314,7 @@ test('images:39', function (t) { }); -test('images:40', function (t) { +test('images:40', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -322,7 +322,7 @@ test('images:40', function (t) { }); -test('images:41', function (t) { +test('images:41', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -330,7 +330,7 @@ test('images:41', function (t) { }); -test('images:42', function (t) { +test('images:42', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a1'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -338,7 +338,7 @@ test('images:42', function (t) { }); -test('images:43', function (t) { +test('images:43', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a10'; t.is(textile.convert(tx), '

    This is an

    ', tx); @@ -346,7 +346,7 @@ test('images:43', function (t) { }); -test('images:44', function (t) { +test('images:44', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b.'; t.is(textile.convert(tx), '

    This is an .

    ', tx); @@ -354,7 +354,7 @@ test('images:44', function (t) { }); -test('images:45', function (t) { +test('images:45', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#1.'; t.is(textile.convert(tx), '

    This is an .

    ', tx); @@ -362,7 +362,7 @@ test('images:45', function (t) { }); -test('images:46', function (t) { +test('images:46', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a.'; t.is(textile.convert(tx), '

    This is an .

    ', tx); @@ -370,7 +370,7 @@ test('images:46', function (t) { }); -test('images:47', function (t) { +test('images:47', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a1.'; t.is(textile.convert(tx), '

    This is an .

    ', tx); @@ -378,7 +378,7 @@ test('images:47', function (t) { }); -test('images:48', function (t) { +test('images:48', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a10.'; t.is(textile.convert(tx), '

    This is an .

    ', tx); @@ -386,7 +386,7 @@ test('images:48', function (t) { }); -test('images:49', function (t) { +test('images:49', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b, but this is not.'; t.is(textile.convert(tx), '

    This is an , but this is not.

    ', tx); @@ -394,7 +394,7 @@ test('images:49', function (t) { }); -test('images:50', function (t) { +test('images:50', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#1, but this is not.'; t.is(textile.convert(tx), '

    This is an , but this is not.

    ', tx); @@ -402,7 +402,7 @@ test('images:50', function (t) { }); -test('images:51', function (t) { +test('images:51', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a, but this is not.'; t.is(textile.convert(tx), '

    This is an , but this is not.

    ', tx); @@ -410,7 +410,7 @@ test('images:51', function (t) { }); -test('images:52', function (t) { +test('images:52', t => { const tx = 'This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a1, but this is not.'; t.is(textile.convert(tx), '

    This is an , but this is not.

    ', tx); @@ -418,7 +418,7 @@ test('images:52', function (t) { }); -test('images:53', function (t) { +test('images:53', t => { const tx = '(This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a10) This is not.'; t.is(textile.convert(tx), '

    (This is an ) This is not.

    ', tx); @@ -426,7 +426,7 @@ test('images:53', function (t) { }); -test('images:54', function (t) { +test('images:54', t => { const tx = '(This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b) This is not.'; t.is(textile.convert(tx), '

    (This is an ) This is not.

    ', tx); @@ -434,7 +434,7 @@ test('images:54', function (t) { }); -test('images:55', function (t) { +test('images:55', t => { const tx = '(This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#1) This is not.'; t.is(textile.convert(tx), '

    (This is an ) This is not.

    ', tx); @@ -442,7 +442,7 @@ test('images:55', function (t) { }); -test('images:56', function (t) { +test('images:56', t => { const tx = '(This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a) This is not.'; t.is(textile.convert(tx), '

    (This is an ) This is not.

    ', tx); @@ -450,7 +450,7 @@ test('images:56', function (t) { }); -test('images:57', function (t) { +test('images:57', t => { const tx = '(This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a1) This is not.'; t.is(textile.convert(tx), '

    (This is an ) This is not.

    ', tx); @@ -458,7 +458,7 @@ test('images:57', function (t) { }); -test('images:58', function (t) { +test('images:58', t => { const tx = '(This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a10) This is not.'; t.is(textile.convert(tx), '

    (This is an ) This is not.

    ', tx); @@ -466,7 +466,7 @@ test('images:58', function (t) { }); -test('image with relative src with dot', function (t) { +test('image with relative src with dot', t => { const tx = '!../../image.jpg!'; t.is(textile.convert(tx), '

    ', tx); @@ -474,7 +474,7 @@ test('image with relative src with dot', function (t) { }); -test('image with class', function (t) { +test('image with class', t => { const tx = '!(myclass)image.jpg!'; t.is(textile.convert(tx), '

    ', tx); @@ -482,7 +482,7 @@ test('image with class', function (t) { }); -test('image with class and dotspace', function (t) { +test('image with class and dotspace', t => { const tx = '!(myclass). image.jpg!'; t.is(textile.convert(tx), '

    ', tx); @@ -490,7 +490,7 @@ test('image with class and dotspace', function (t) { }); -test('image with class and relative src with dots', function (t) { +test('image with class and relative src with dots', t => { const tx = '!(myclass)../../image.jpg!'; t.is(textile.convert(tx), '

    ', tx); @@ -498,7 +498,7 @@ test('image with class and relative src with dots', function (t) { }); -test('image with class and dotspace and relative src with dots', function (t) { +test('image with class and dotspace and relative src with dots', t => { const tx = '!(myclass). ../../image.jpg!'; t.is(textile.convert(tx), '

    ', tx); @@ -506,7 +506,7 @@ test('image with class and dotspace and relative src with dots', function (t) { }); -test('image with style', function (t) { +test('image with style', t => { const tx = '!{color:red}image.jpg!'; t.is(textile.convert(tx), '

    ', tx); @@ -514,7 +514,7 @@ test('image with style', function (t) { }); -test('image with style and dotspace', function (t) { +test('image with style and dotspace', t => { const tx = '!{color:red}. image.jpg!'; t.is(textile.convert(tx), '

    ', tx); @@ -522,7 +522,7 @@ test('image with style and dotspace', function (t) { }); -test('image attributes has ampersand html entity in alt and title', function (t) { +test('image attributes has ampersand html entity in alt and title', t => { const tx = '!/pictures/cat_and_fox.jpg(Trady Blix & The cartoon fox)!'; t.is(textile.convert(tx), '

    Trady Blix & The cartoon fox

    ', tx); @@ -530,7 +530,7 @@ test('image attributes has ampersand html entity in alt and title', function (t) }); -test('image attributes has double quote html entity in alt and title', function (t) { +test('image attributes has double quote html entity in alt and title', t => { const tx = '!/pictures/bacon.jpg(The fox said: "Have some chunky bacon")!'; t.is(textile.convert(tx), '

    The fox said: "Have some chunky bacon"

    ', tx); @@ -538,7 +538,7 @@ test('image attributes has double quote html entity in alt and title', function }); -test('image attributes has single quote html entity in alt and title', function (t) { +test('image attributes has single quote html entity in alt and title', t => { const tx = "!/pictures/bacon.jpg(The fox said: 'Have some chunky bacon')!"; t.is(textile.convert(tx), '

    The fox said: 'Have some chunky bacon'

    ', tx); @@ -546,7 +546,7 @@ test('image attributes has single quote html entity in alt and title', function }); -test('in square brackets', function (t) { +test('in square brackets', t => { const tx = 'This is an [!image.jpg!] you see.'; t.is(textile.convert(tx), '

    This is an you see.

    ', tx); @@ -554,7 +554,7 @@ test('in square brackets', function (t) { }); -test('with link in square brackets', function (t) { +test('with link in square brackets', t => { const tx = 'This is an [!image.jpg!:http://example.com/] you see.'; t.is(textile.convert(tx), '

    This is an you see.

    ', tx); @@ -562,7 +562,7 @@ test('with link in square brackets', function (t) { }); -test('url containing parentheses', function (t) { +test('url containing parentheses', t => { const tx = '!http://commons.wikimedia.org/wiki/File:Rubis_sur_calcite_2(Vietnam).jpg!'; t.is(textile.convert(tx), '

    ', tx); @@ -570,7 +570,7 @@ test('url containing parentheses', function (t) { }); -test('with alt and url containing parentheses', function (t) { +test('with alt and url containing parentheses', t => { const tx = '!http://commons.wikimedia.org/wiki/File:Rubis_sur_calcite_2(Vietnam).jpg(a big rock)!'; t.is(textile.convert(tx), '

    a big rock

    ', tx); @@ -578,7 +578,7 @@ test('with alt and url containing parentheses', function (t) { }); -test('with link that contains parentheses', function (t) { +test('with link that contains parentheses', t => { const tx = '!image.jpg(Alt text with (parentheses).)!'; t.is(textile.convert(tx), '

    Alt text with (parentheses).

    ', tx); @@ -586,7 +586,7 @@ test('with link that contains parentheses', function (t) { }); -test('with link and title and text afterward', function (t) { +test('with link and title and text afterward', t => { const tx = '!/image_r.jpg(description)!:image.jpg text.'; t.is(textile.convert(tx), '

    description text.

    ', tx); diff --git a/test/instiki.js b/test/instiki.js index b291cca..fa298c1 100644 --- a/test/instiki.js +++ b/test/instiki.js @@ -1,8 +1,8 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // instiki.yml -test('instiki:1', function (t) { +test('instiki:1', t => { const tx = '_Hi, Joe Bob?, this should all be in italic!_'; t.is(textile.convert(tx), '

    Hi, Joe Bob?, this should all be in italic!

    ', tx); @@ -11,7 +11,7 @@ test('instiki:1', function (t) { -test('instiki:2', function (t) { +test('instiki:2', t => { const tx = '*this span is strong*'; t.is(textile.convert(tx), '

    this span is strong

    ', tx); @@ -20,7 +20,7 @@ test('instiki:2', function (t) { -test('instiki:3', function (t) { +test('instiki:3', t => { const tx = '*this Camel Thing? is strong*'; t.is(textile.convert(tx), '

    this Camel Thing? is strong

    ', tx); @@ -29,7 +29,7 @@ test('instiki:3', function (t) { -test('instiki:4', function (t) { +test('instiki:4', t => { const tx = '_this span is italic_'; t.is(textile.convert(tx), '

    this span is italic

    ', tx); @@ -47,28 +47,29 @@ test('instiki:4', function (t) { */ -test('instiki:6', function (t) { - const tx = 'h2. Version History\n\n\ -* "Version\n\ -0.0":http://www.threewordslong.com/render-0-8-9b.patch - Early version using MD5 hashes.\n\ -* "Version\n\ -0.1":http://www.threewordslong.com/chunk-0-1.patch.gz - First cut of new system. Much cleaner.\n\ -* "Version 0.2":http://www.threewordslong.com/chunk-0-2.patch.gz - Fixed problem with "authors" page and some tests.'; +test('instiki:6', t => { + const tx = `h2. Version History + +* "Version +0.0":http://www.threewordslong.com/render-0-8-9b.patch - Early version using MD5 hashes. +* "Version +0.1":http://www.threewordslong.com/chunk-0-1.patch.gz - First cut of new system. Much cleaner. +* "Version 0.2":http://www.threewordslong.com/chunk-0-2.patch.gz - Fixed problem with "authors" page and some tests.`; t.is(textile.convert(tx), - '

    Version History

    \n\ -', tx); + `

    Version History

    +
      +\t
    • Version
      +0.0
      – Early version using MD5 hashes.
    • +\t
    • Version
      +0.1
      – First cut of new system. Much cleaner.
    • +\t
    • Version 0.2 – Fixed problem with “authors” page and some tests.
    • +
    `, tx); t.end(); }); -test('instiki:7', function (t) { +test('instiki:7', t => { const tx = '--richSeymour --whyTheLuckyStiff'; t.is(textile.convert(tx), '

    —richSeymour —whyTheLuckyStiff

    ', tx); diff --git a/test/jstextile.js b/test/jstextile.js index ffc8002..821ed25 100644 --- a/test/jstextile.js +++ b/test/jstextile.js @@ -1,7 +1,7 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; -test('HTML blockquote spanning paragraphs', function (t) { +test('HTML blockquote spanning paragraphs', t => { t.is(textile.convert( 'A line break delimited block quote:\n\n' + '
    \n' + @@ -17,7 +17,7 @@ test('HTML blockquote spanning paragraphs', function (t) { }); -test('User has mistaken list format for markdowns', function (t) { +test('User has mistaken list format for markdowns', t => { t.is(textile.convert( 'Here a tricky list\n\n' + '* item1\n' + @@ -37,7 +37,7 @@ test('User has mistaken list format for markdowns', function (t) { }); -test('HTML list', function (t) { +test('HTML list', t => { t.is(textile.convert( 'Your inventory:\n\n' + '
      \n' + @@ -57,20 +57,20 @@ test('HTML list', function (t) { }); -test('Span with an ending percentage', function (t) { +test('Span with an ending percentage', t => { t.is(textile.convert('span %percent 10%% of stuff'), '

      span percent 10% of stuff

      '); t.end(); }); -test('Arrow glyph', function (t) { +test('Arrow glyph', t => { t.is(textile.convert('-> arrow'), '

      → arrow

      '); t.end(); }); -test('Simple table with tailing space', function (t) { +test('Simple table with tailing space', t => { t.is(textile.convert('|a|b|\n|a|b| '), '\n' + '\t\n' + @@ -87,7 +87,7 @@ test('Simple table with tailing space', function (t) { -test('clean trademarks #1', function (t) { +test('clean trademarks #1', t => { t.is(textile.convert('(TM) and (tm), but not (Tm) or (tM)'), '

      ™ and ™, but not (Tm) or (tM)

      '); t.end(); @@ -95,7 +95,7 @@ test('clean trademarks #1', function (t) { -test('clean trademarks #3', function (t) { +test('clean trademarks #3', t => { t.is(textile.convert('(TM) and [TM], but not (TM] or [TM)'), '

      ™ and ™, but not (TM] or [TM)

      '); t.end(); @@ -103,7 +103,7 @@ test('clean trademarks #3', function (t) { -test('clean trademarks #3', function (t) { +test('clean trademarks #3', t => { // escaping works in tables t.is(textile.convert('| cat > sed | awk ==|== less |\n| 1234 | 2345 |'), '
      \n' + @@ -133,7 +133,7 @@ test( '__test_', function ( t ) { // Both RC and PHP do crazy things when faced with something like this. // While it IS bizarre input, we should still try to stay in control. -test('Strange list', function (t) { +test('Strange list', t => { t.is(textile.convert( '* a\n' + '*** b\n' + @@ -162,19 +162,19 @@ test('Strange list', function (t) { // then fails with PHP-style array links. // // I guess this is why the original used two fencing styles. -test('Fenced PHP-style array link (1)', function (t) { +test('Fenced PHP-style array link (1)', t => { t.is(textile.convert('["PHP array link":http://example.com/?foo[]=wewe]'), '

      PHP array link

      '); t.end(); }); -test('Fenced PHP-style array link (2)', function (t) { +test('Fenced PHP-style array link (2)', t => { t.is(textile.convert('["PHP array link":http://example.com/?foo[1]=wewe]'), '

      PHP array link

      '); t.end(); }); -test('Fenced PHP-style array link (3)', function (t) { +test('Fenced PHP-style array link (3)', t => { t.is(textile.convert('["PHP array link":http://example.com/?foo[a]=wewe]'), '

      PHP array link

      '); t.end(); @@ -182,7 +182,7 @@ test('Fenced PHP-style array link (3)', function (t) { -test('HTML comment (1)', function (t) { +test('HTML comment (1)', t => { t.is(textile.convert('line\n\nline'), '

      line
      \n' + '
      \n' + @@ -191,7 +191,7 @@ test('HTML comment (1)', function (t) { }); -test('HTML comment (2)', function (t) { +test('HTML comment (2)', t => { t.is(textile.convert('line\n\n\n\nline'), '

      line

      \n' + '\n' + @@ -201,7 +201,7 @@ test('HTML comment (2)', function (t) { -test('ALL CAPS', function (t) { +test('ALL CAPS', t => { t.is(textile.convert('REYKJAVÍK'), '

      REYKJAVÍK

      '); t.end(); @@ -209,7 +209,7 @@ test('ALL CAPS', function (t) { -test('Multiple classes', function (t) { +test('Multiple classes', t => { t.is(textile.convert('p(first second). some text'), '

      some text

      ', '2 css classes'); @@ -217,7 +217,7 @@ test('Multiple classes', function (t) { }); -test('Multiple classes', function (t) { +test('Multiple classes', t => { t.is(textile.convert('p(first second third). some text'), '

      some text

      ', '3 css classes'); @@ -225,7 +225,7 @@ test('Multiple classes', function (t) { }); -test('Multiple classes', function (t) { +test('Multiple classes', t => { t.is(textile.convert('p(first second third#someid). some text'), '

      some text

      ', '3 css classes + id'); @@ -233,7 +233,7 @@ test('Multiple classes', function (t) { }); -test('Multiple classes', function (t) { +test('Multiple classes', t => { t.is(textile.convert('"(foo bar) text (link title)":http://example.com/'), '

      text

      ', '2 classes + title on a link'); @@ -241,7 +241,7 @@ test('Multiple classes', function (t) { }); -test('Multiple classes', function (t) { +test('Multiple classes', t => { t.is(textile.convert('| a |(eee fee). b |\n| a |( b )|'), '
      \n' + '\t\n' + @@ -258,7 +258,7 @@ test('Multiple classes', function (t) { }); -test('Multiple classes', function (t) { +test('Multiple classes', t => { t.is(textile.convert( '_(span)_\n' + '_(span span)_\n' + @@ -275,7 +275,7 @@ test('Multiple classes', function (t) { }); -test('Multiple classes', function (t) { +test('Multiple classes', t => { t.is(textile.convert('_{display:block}(span) span (span)_'), '

      (span) span (span)

      ', 'partal attr span parse'); @@ -283,7 +283,7 @@ test('Multiple classes', function (t) { }); -test('inline code with leading @', function (t) { +test('inline code with leading @', t => { t.is(textile.convert('a @@var@ test'), '

      a @var test

      ', 'inline code with leading @'); @@ -291,7 +291,7 @@ test('inline code with leading @', function (t) { }); -test('inline code with a single @', function (t) { +test('inline code with a single @', t => { t.is(textile.convert('a @@@ test'), '

      a @ test

      ', 'inline code with a single @'); @@ -299,7 +299,7 @@ test('inline code with a single @', function (t) { }); -test('empty block 1', function (t) { +test('empty block 1', t => { t.is(textile.convert('h1.'), '

      h1.

      ', 'empty block #1'); @@ -307,7 +307,7 @@ test('empty block 1', function (t) { }); -test('empty block 2', function (t) { +test('empty block 2', t => { t.is(textile.convert('h1. '), '

      ', 'empty block #2'); @@ -315,7 +315,7 @@ test('empty block 2', function (t) { }); -test('empty block 3', function (t) { +test('empty block 3', t => { t.is(textile.convert('h1{display:block}. '), '

      ', 'empty block #3'); @@ -323,7 +323,7 @@ test('empty block 3', function (t) { }); -test('non list 1', function (t) { +test('non list 1', t => { t.is(textile.convert('*'), '

      *

      ', 'non list #1'); @@ -331,7 +331,7 @@ test('non list 1', function (t) { }); -test('non list 2', function (t) { +test('non list 2', t => { t.is(textile.convert('#'), '

      #

      ', 'non list #2'); @@ -339,7 +339,7 @@ test('non list 2', function (t) { }); -test('non list 3', function (t) { +test('non list 3', t => { t.is(textile.convert('*\n'), '

      *

      ', 'non list #3'); @@ -347,7 +347,7 @@ test('non list 3', function (t) { }); -test('non list 4', function (t) { +test('non list 4', t => { t.is(textile.convert('#\n'), '

      #

      ', 'non list #4'); @@ -355,7 +355,7 @@ test('non list 4', function (t) { }); -test('non list 5', function (t) { +test('non list 5', t => { t.is(textile.convert('*\ntest'), '

      *
      \ntest

      ', 'non list #5'); @@ -363,7 +363,7 @@ test('non list 5', function (t) { }); -test('empty list 1', function (t) { +test('empty list 1', t => { t.is(textile.convert('* \n'), '

      *

      ', 'empty list #1'); @@ -371,7 +371,7 @@ test('empty list 1', function (t) { }); -test('empty list 2', function (t) { +test('empty list 2', t => { t.is(textile.convert('# \n'), '

      #

      ', 'empty list #2'); @@ -379,7 +379,7 @@ test('empty list 2', function (t) { }); -test('insert empty list 1', function (t) { +test('insert empty list 1', t => { t.is(textile.convert('*\n\ntest'), '

      *

      \n

      test

      ', 'insert empty list #1'); @@ -387,7 +387,7 @@ test('insert empty list 1', function (t) { }); -test('insert empty list 2', function (t) { +test('insert empty list 2', t => { t.is(textile.convert('#\n\ntest'), '

      #

      \n

      test

      ', 'insert empty list #2'); @@ -395,7 +395,7 @@ test('insert empty list 2', function (t) { }); -test('empty attributes (1)', function (t) { +test('empty attributes (1)', t => { t.is(textile.convert(''), '

      ', 'empty attributes (1)'); @@ -403,7 +403,7 @@ test('empty attributes (1)', function (t) { }); -test('empty attributes (2)', function (t) { +test('empty attributes (2)', t => { t.is(textile.convert(''), '

      ', 'empty attributes (2)'); @@ -411,7 +411,7 @@ test('empty attributes (2)', function (t) { }); -test('bold line vs. list', function (t) { +test('bold line vs. list', t => { t.is(textile.convert('*{color:red}bold red*'), '

      bold red

      ', 'bold line vs. list'); @@ -419,7 +419,7 @@ test('bold line vs. list', function (t) { }); -test('strict list matching (1)', function (t) { +test('strict list matching (1)', t => { t.is(textile.convert( '*{color:red} item*\n\n' + '* item*\n\n' + @@ -436,7 +436,7 @@ test('strict list matching (1)', function (t) { }); -test('strict list matching (2)', function (t) { +test('strict list matching (2)', t => { t.is(textile.convert( '*{color:red} item\n\n' + '* item\n\n' + @@ -454,7 +454,7 @@ test('strict list matching (2)', function (t) { -test('image parsing speed bug', function (t) { +test('image parsing speed bug', t => { const t1 = Date.now(); textile.convert('!a()aaaaaaaaaaaaaaaaaaaaaaaaaa'); const t2 = Date.now(); @@ -464,7 +464,7 @@ test('image parsing speed bug', function (t) { -test('image parsing speed bug 2 (issue #40)', function (t) { +test('image parsing speed bug 2 (issue #40)', t => { const t1 = Date.now(); textile.convert('!@((. tset Sûpp0rt ticket onññly... !@((. tset Sûpp0rt ticket onññly... !@((.'); const t2 = Date.now(); @@ -474,7 +474,7 @@ test('image parsing speed bug 2 (issue #40)', function (t) { -test('parse inline textile in footnotes', function (t) { +test('parse inline textile in footnotes', t => { t.is(textile.convert('fn1. This is _emphasized_ *strong*'), '

      1 This is emphasized strong

      ', 'footnote inline textile'); @@ -483,7 +483,7 @@ test('parse inline textile in footnotes', function (t) { // greedy globbing block parser bug [#21] -test('block parser bug (#21)', function (t) { +test('block parser bug (#21)', t => { t.is(textile.convert('pab\n\npabcde\n\nbqabcdef\n\nlast line ending in period+space. \n'), '

      pab

      \n' + '

      pabcde

      \n' + @@ -494,7 +494,7 @@ test('block parser bug (#21)', function (t) { -test('trailing space linebreak bug (#26)', function (t) { +test('trailing space linebreak bug (#26)', t => { t.is(textile.convert('Line 1 \nLine 2\nLine 3'), '

      Line 1
      \nLine 2
      \nLine 3

      '); t.end(); @@ -502,7 +502,7 @@ test('trailing space linebreak bug (#26)', function (t) { -test('support unicode symbols (#27)', function (t) { +test('support unicode symbols (#27)', t => { t.is(textile.convert( 'Trademark(tm)\n' + 'Registered(R)\n' + @@ -525,7 +525,7 @@ test('support unicode symbols (#27)', function (t) { -test('footnotes should not appear directly inside tags (#26)', function (t) { +test('footnotes should not appear directly inside tags (#26)', t => { t.is(textile.convert('*[1234]* _[1234]_'), '

      [1234] [1234]

      '); t.end(); @@ -533,14 +533,14 @@ test('footnotes should not appear directly inside tags (#26)', function (t) { -test('footnotes have to directly follow text (#26)', function (t) { +test('footnotes have to directly follow text (#26)', t => { t.is(textile.convert('[1234]'), '

      [1234]

      '); t.end(); }); -test('footnote links can be disabled with !', function (t) { +test('footnote links can be disabled with !', t => { t.is(textile.convert('foobar[1234!]'), '

      foobar1234

      '); t.end(); @@ -548,7 +548,7 @@ test('footnote links can be disabled with !', function (t) { -test('bc blocks should not be terminated by lists (#45)', function (t) { +test('bc blocks should not be terminated by lists (#45)', t => { t.is(textile.convert( 'bc. # here comes foo\nFoo\n# here comes bar\nBar' ), @@ -573,7 +573,7 @@ test('bc blocks should not be terminated by lists (#45)', function (t) { }); -test('pre blocks should not be terminated by lists (#45)', function (t) { +test('pre blocks should not be terminated by lists (#45)', t => { t.is(textile.convert( 'pre. # here comes foo\nFoo\n# here comes bar\nBar' ), @@ -598,14 +598,14 @@ test('pre blocks should not be terminated by lists (#45)', function (t) { }); -test('nested blockquotes (#36)', function (t) { +test('nested blockquotes (#36)', t => { t.is(textile.convert('
      a
      b
      c
      '), '
      a
      b
      c
      '); t.end(); }); -test('list whitespace (#47)', function (t) { +test('list whitespace (#47)', t => { const tx = '* unsorted list item 1\n# sorted list item 1\n# sorted list item 2'; t.is(textile.convert(tx), '
        \n\t
      • unsorted list item 1
      • \n\t
      • sorted list item 1
      • \n\t
      • sorted list item 2
      • \n
      '); @@ -613,7 +613,7 @@ test('list whitespace (#47)', function (t) { }); -test('notextile should work inline (#49)', function (t) { +test('notextile should work inline (#49)', t => { const tx = 'pre *.Catalog und *.* post'; t.is(textile.convert(tx), '

      pre *.Catalog und *.* post

      '); @@ -621,7 +621,7 @@ test('notextile should work inline (#49)', function (t) { }); -test('Lists have to start at level 1 (#56)', function (t) { +test('Lists have to start at level 1 (#56)', t => { const tx = '*** foo'; t.is(textile.convert(tx), '

      *** foo

      '); @@ -629,14 +629,14 @@ test('Lists have to start at level 1 (#56)', function (t) { }); -test('inline tag should bound phrase (#57)', function (t) { +test('inline tag should bound phrase (#57)', t => { const tx = '*foo*bar'; t.is(textile.convert(tx), '

      foobar

      '); t.end(); }); -test('inline tag should bound phrase [2] (#57)', function (t) { +test('inline tag should bound phrase [2] (#57)', t => { const tx = '*foo*bar'; t.is(textile.convert(tx), '

      foobar

      '); @@ -644,7 +644,7 @@ test('inline tag should bound phrase [2] (#57)', function (t) { }); -test('self referencing links (#44)', function (t) { +test('self referencing links (#44)', t => { t.is(textile.convert('"$":http://example.com/sw'), '

      example.com/sw

      '); t.is(textile.convert('"$":https://example.com/sw'), @@ -659,7 +659,7 @@ test('self referencing links (#44)', function (t) { }); -test('linebreaks following a table (#52)', function (t) { +test('linebreaks following a table (#52)', t => { const tx1 = '|a|b|\n\n\nh1. header'; t.is(textile.convert(tx1), '
      \n\t\n\t\t\n\t\t\n\t\n
      ab
      \n' + @@ -674,7 +674,7 @@ test('linebreaks following a table (#52)', function (t) { }); -test('prefixed links (#60)', function (t) { +test('prefixed links (#60)', t => { t.is(textile.convert('user <"user@example.com":mailto:user@example.com>'), '

      user <user@example.com>

      '); t.is(textile.convert('user ["user@example.com":mailto:user@example.com'), @@ -687,14 +687,14 @@ test('prefixed links (#60)', function (t) { }); -test('link alias work in HTML tags', function (t) { +test('link alias work in HTML tags', t => { t.is(textile.convert('link1 "link2":foo\n\n[foo]http://example.com'), '

      link1 link2

      '); t.end(); }); -test('correct glyph convertion', function (t) { +test('correct glyph convertion', t => { t.is(textile.convert('p. foo -- bar _foo ==foo -- bar== bar_ @foo -- bar@\n\nnotextile. foo -- bar'), '

      foo — bar foo foo -- bar bar foo -- bar

      \nfoo -- bar'); t.end(); diff --git a/test/line-numbers.js b/test/line-numbers.js index 1e5cec0..e7b3eb8 100644 --- a/test/line-numbers.js +++ b/test/line-numbers.js @@ -1,9 +1,8 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; function parse (tx) { - return textile - .parseTree(tx) + return textile.parseTree(tx) .visit(node => { if (node.nodeType === 1) { node.setAttribute('data-line', node.pos.line + 1); diff --git a/test/linebreaks.js b/test/linebreaks.js index 0cc7988..7138b08 100644 --- a/test/linebreaks.js +++ b/test/linebreaks.js @@ -1,528 +1,559 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // jstextile linebreaks -test('paragraphs', function (t) { - const tx = 'A single paragraph.\r\n\r\n\ -Followed by another.'; +test('paragraphs', t => { + const tx = `A single paragraph.\r +\r +Followed by another.`; t.is(textile.convert(tx), - '

      A single paragraph.

      \n\ -

      Followed by another.

      ', tx); + `

      A single paragraph.

      +

      Followed by another.

      `, tx); t.end(); }); -test('blocks with spaces on the blank line in between', function (t) { - const tx = 'This is line one\r\n\ - \r\n\ -This is line two'; +test('blocks with spaces on the blank line in between', t => { + const tx = `This is line one\r + \r +This is line two`; t.is(textile.convert(tx), - '

      This is line one

      \n\ -

      This is line two

      ', tx); + `

      This is line one

      +

      This is line two

      `, tx); t.end(); }); -test('blocks with tabl on the blank line in between', function (t) { - const tx = 'This is line one\r\n\ -\t\r\n\ -This is line two'; +test('blocks with tabl on the blank line in between', t => { + const tx = `This is line one\r +\t\r +This is line two`; t.is(textile.convert(tx), - '

      This is line one

      \n\ -

      This is line two

      ', tx); + `

      This is line one

      +

      This is line two

      `, tx); t.end(); }); -test('extended blockquote containing block start', function (t) { - const tx = 'bq.. I saw a ship. It ate my elephant.\r\n\r\n\ -When the elephant comes to take a p. you...'; +test('extended blockquote containing block start', t => { + const tx = `bq.. I saw a ship. It ate my elephant.\r +\r +When the elephant comes to take a p. you...`; t.is(textile.convert(tx), - '
      \n\ -

      I saw a ship. It ate my elephant.

      \n\ -

      When the elephant comes to take a p. you…

      \n\ -
      ', tx); + `
      +

      I saw a ship. It ate my elephant.

      +

      When the elephant comes to take a p. you…

      +
      `, tx); t.end(); }); -test('notextile block', function (t) { - const tx = 'Some text:\r\n\r\n\ -\r\n\ -
      \r\n\
      -Some code\r\n\
      -
      \r\n\ -
      \r\n\r\n\ -Some more text.'; +test('notextile block', t => { + const tx = `Some text:\r +\r +\r +
      \r
      +Some code\r
      +
      \r +
      \r +\r +Some more text.`; t.is(textile.convert(tx), - '

      Some text:

      \n\ -
      \r\n\
      -Some code\r\n\
      -
      \n\ -

      Some more text.

      ', tx); + `

      Some text:

      +
      \r
      +Some code\r
      +
      +

      Some more text.

      `, tx); t.end(); }); -test('extended notextile block containing block start', function (t) { - const tx = 'notextile.. I saw a ship. It ate my elephant.\r\n\r\n\ -When the elephant comes to take a p. you...'; +test('extended notextile block containing block start', t => { + const tx = `notextile.. I saw a ship. It ate my elephant.\r +\r +When the elephant comes to take a p. you...`; t.is(textile.convert(tx), - 'I saw a ship. It ate my elephant.\r\n\r\n\ -When the elephant comes to take a p. you...', tx); + `I saw a ship. It ate my elephant.\r +\r +When the elephant comes to take a p. you...`, tx); t.end(); }); -test('html tags', function (t) { - const tx = 'I am very serious.\r\n\r\n\ -
      \r\n\
      -  I am very serious.\r\n\
      -
      '; +test('html tags', t => { + const tx = `I am very serious.\r +\r +
      \r
      +  I am very serious.\r
      +
      `; t.is(textile.convert(tx), - '

      I am very serious.

      \n\ -
      \r\n\
      -  I am <b>very</b> serious.\r\n\
      -
      ', tx); + `

      I am very serious.

      +
      \r
      +  I am <b>very</b> serious.\r
      +
      `, tx); t.end(); }); -test('line breaks', function (t) { - const tx = 'I spoke.\r\n\ -And none replied.'; +test('line breaks', t => { + const tx = `I spoke.\r +And none replied.`; t.is(textile.convert(tx), - '

      I spoke.
      \n\ -And none replied.

      ', tx); + `

      I spoke.
      +And none replied.

      `, tx); t.end(); }); -test('blockquote', function (t) { - const tx = 'Any old text\r\n\r\n\ -bq. A block quotation.\r\n\r\n\ -Any old text'; +test('blockquote', t => { + const tx = `Any old text\r +\r +bq. A block quotation.\r +\r +Any old text`; t.is(textile.convert(tx), - '

      Any old text

      \n\ -
      \n\ -

      A block quotation.

      \n\ -
      \n\ -

      Any old text

      ', tx); + `

      Any old text

      +
      +

      A block quotation.

      +
      +

      Any old text

      `, tx); t.end(); }); -test('code blocks', function (t) { - const tx = "
      \r\n\
      -\r\n\
      -  a.gsub!( /\r\n\
      -
      "; +test('code blocks', t => { + const tx = `
      \r
      +\r
      +  a.gsub!( /\r
      +
      `; t.is(textile.convert(tx), - "
      \r\n\
      -\r\n\
      -  a.gsub!( /</, '' )\r\n\
      -\r\n\
      -
      ", tx); + `
      \r
      +\r
      +  a.gsub!( /</, '' )\r
      +\r
      +
      `, tx); t.end(); }); -test('numbered list', function (t) { - const tx = '# A first item\r\n\ -# A second item\r\n\ -# A third'; +test('numbered list', t => { + const tx = `# A first item\r +# A second item\r +# A third`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. A first item
      2. \n\ -\t
      3. A second item
      4. \n\ -\t
      5. A third
      6. \n\ -
      ', tx); + `
        +\t
      1. A first item
      2. +\t
      3. A second item
      4. +\t
      5. A third
      6. +
      `, tx); t.end(); }); -test('nested numbered lists', function (t) { - const tx = '# Fuel could be:\r\n\ -## Coal\r\n\ -## Gasoline\r\n\ -## Electricity\r\n\ -# Humans need only:\r\n\ -## Water\r\n\ -## Protein'; +test('nested numbered lists', t => { + const tx = `# Fuel could be:\r +## Coal\r +## Gasoline\r +## Electricity\r +# Humans need only:\r +## Water\r +## Protein`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. Fuel could be:\n\ -\t
          \n\ -\t\t
        1. Coal
        2. \n\ -\t\t
        3. Gasoline
        4. \n\ -\t\t
        5. Electricity
        6. \n\ -\t
      2. \n\ -\t
      3. Humans need only:\n\ -\t
          \n\ -\t\t
        1. Water
        2. \n\ -\t\t
        3. Protein
        4. \n\ -\t
      4. \n\ -
      ', tx); + `
        +\t
      1. Fuel could be: +\t
          +\t\t
        1. Coal
        2. +\t\t
        3. Gasoline
        4. +\t\t
        5. Electricity
        6. +\t
      2. +\t
      3. Humans need only: +\t
          +\t\t
        1. Water
        2. +\t\t
        3. Protein
        4. +\t
      4. +
      `, tx); t.end(); }); -test('bulleted list', function (t) { - const tx = '* A first item\r\n\ -* A second item\r\n\ -* A third'; +test('bulleted list', t => { + const tx = `* A first item\r +* A second item\r +* A third`; t.is(textile.convert(tx), - '
        \n\ -\t
      • A first item
      • \n\ -\t
      • A second item
      • \n\ -\t
      • A third
      • \n\ -
      ', tx); + `
        +\t
      • A first item
      • +\t
      • A second item
      • +\t
      • A third
      • +
      `, tx); t.end(); }); -test('nested bulleted lists', function (t) { - const tx = '* Fuel could be:\r\n\ -** Coal\r\n\ -** Gasoline\r\n\ -** Electricity\r\n\ -* Humans need only:\r\n\ -** Water\r\n\ -** Protein'; +test('nested bulleted lists', t => { + const tx = `* Fuel could be:\r +** Coal\r +** Gasoline\r +** Electricity\r +* Humans need only:\r +** Water\r +** Protein`; t.is(textile.convert(tx), - '
        \n\ -\t
      • Fuel could be:\n\ -\t
          \n\ -\t\t
        • Coal
        • \n\ -\t\t
        • Gasoline
        • \n\ -\t\t
        • Electricity
        • \n\ -\t
      • \n\ -\t
      • Humans need only:\n\ -\t
          \n\ -\t\t
        • Water
        • \n\ -\t\t
        • Protein
        • \n\ -\t
      • \n\ -
      ', tx); + `
        +\t
      • Fuel could be: +\t
          +\t\t
        • Coal
        • +\t\t
        • Gasoline
        • +\t\t
        • Electricity
        • +\t
      • +\t
      • Humans need only: +\t
          +\t\t
        • Water
        • +\t\t
        • Protein
        • +\t
      • +
      `, tx); t.end(); }); -test('image alignments', function (t) { - const tx = '!>obake.gif!\r\n\r\n\ -And others sat all round the small\r\n\ -machine and paid it to sing to them.'; +test('image alignments', t => { + const tx = `!>obake.gif!\r +\r +And others sat all round the small\r +machine and paid it to sing to them.`; t.is(textile.convert(tx), - '

      \n\ -

      And others sat all round the small
      \n\ -machine and paid it to sing to them.

      ', tx); + `

      +

      And others sat all round the small
      +machine and paid it to sing to them.

      `, tx); t.end(); }); -test('tables', function (t) { - const tx = '| name | age | sex |\r\n\ -| joan | 24 | f |\r\n\ -| archie | 29 | m |\r\n\ -| bella | 45 | f |'; +test('tables', t => { + const tx = `| name | age | sex |\r +| joan | 24 | f |\r +| archie | 29 | m |\r +| bella | 45 | f |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      name age sex
      joan 24 f
      archie 29 m
      bella 45 f
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
      name age sex
      joan 24 f
      archie 29 m
      bella 45 f
      `, tx); t.end(); }); -test('jstextile linebreaks:17', function (t) { - const tx = 'line\r\n\ -\r\n\ -line'; +test('jstextile linebreaks:17', t => { + const tx = `line\r +\r +line`; t.is(textile.convert(tx), - '

      line
      \n\ -
      \n\ -line

      ', tx); + `

      line
      +
      +line

      `, tx); t.end(); }); -test('jstextile linebreaks:18', function (t) { - const tx = 'line\r\n\r\n\ -\r\n\r\n\ -line'; +test('jstextile linebreaks:18', t => { + const tx = `line\r +\r +\r +\r +line`; t.is(textile.convert(tx), - '

      line

      \n\ -\n\ -

      line

      ', tx); + `

      line

      + +

      line

      `, tx); t.end(); }); -test('non list #3', function (t) { - const tx = '*\r\n\ -'; +test('non list #3', t => { + const tx = `*\r +`; t.is(textile.convert(tx), '

      *

      ', tx); t.end(); }); -test('non list #4', function (t) { - const tx = '#\r\n\ -'; +test('non list #4', t => { + const tx = `#\r +`; t.is(textile.convert(tx), '

      #

      ', tx); t.end(); }); -test('non list #5', function (t) { - const tx = '*\r\n\ -test'; +test('non list #5', t => { + const tx = `*\r +test`; t.is(textile.convert(tx), - '

      *
      \n\ -test

      ', tx); + `

      *
      +test

      `, tx); t.end(); }); -test('empty list #1', function (t) { - const tx = '* \r\n\ -'; +test('empty list #1', t => { + const tx = `* \r +`; t.is(textile.convert(tx), '

      *

      ', tx); t.end(); }); -test('empty list #2', function (t) { - const tx = '# \r\n\ -'; +test('empty list #2', t => { + const tx = `# \r +`; t.is(textile.convert(tx), '

      #

      ', tx); t.end(); }); -test('insert empty list #1', function (t) { - const tx = '*\r\n\r\n\ -test'; +test('insert empty list #1', t => { + const tx = `*\r +\r +test`; t.is(textile.convert(tx), - '

      *

      \n\ -

      test

      ', tx); + `

      *

      +

      test

      `, tx); t.end(); }); -test('insert empty list #2', function (t) { - const tx = '#\r\n\r\n\ -test'; +test('insert empty list #2', t => { + const tx = `#\r +\r +test`; t.is(textile.convert(tx), - '

      #

      \n\ -

      test

      ', tx); + `

      #

      +

      test

      `, tx); t.end(); }); -test('strict list matching (1)', function (t) { - const tx = '*{color:red} item*\r\n\r\n\ -* item*\r\n\r\n\ -*item*'; +test('strict list matching (1)', t => { + const tx = `*{color:red} item*\r +\r +* item*\r +\r +*item*`; t.is(textile.convert(tx), - '
        \n\ -\t
      • item*
      • \n\ -
      \n\ -
        \n\ -\t
      • item*
      • \n\ -
      \n\ -

      item

      ', tx); + `
        +\t
      • item*
      • +
      +
        +\t
      • item*
      • +
      +

      item

      `, tx); t.end(); }); -test('strict list matching (2)', function (t) { - const tx = '*{color:red} item\r\n\r\n\ -* item\r\n\r\n\ -*item'; +test('strict list matching (2)', t => { + const tx = `*{color:red} item\r +\r +* item\r +\r +*item`; t.is(textile.convert(tx), - '
        \n\ -\t
      • item
      • \n\ -
      \n\ -
        \n\ -\t
      • item
      • \n\ -
      \n\ -

      *item

      ', tx); + `
        +\t
      • item
      • +
      +
        +\t
      • item
      • +
      +

      *item

      `, tx); t.end(); }); -test('block parser bug (#21)', function (t) { - const tx = 'pab\r\n\r\n\ -pabcde\r\n\r\n\ -bqabcdef\r\n\r\n\ -last line ending in period+space. \r\n\ -'; +test('block parser bug (#21)', t => { + const tx = `pab\r +\r +pabcde\r +\r +bqabcdef\r +\r +last line ending in period+space. \r +`; t.is(textile.convert(tx), - '

      pab

      \n\ -

      pabcde

      \n\ -

      bqabcdef

      \n\ -

      last line ending in period+space.

      ', tx); + `

      pab

      +

      pabcde

      +

      bqabcdef

      +

      last line ending in period+space.

      `, tx); t.end(); }); -test('header with 1 blank line below', function (t) { - const tx = 'h1. Header\r\n\r\n\ -text'; +test('header with 1 blank line below', t => { + const tx = `h1. Header\r +\r +text`; t.is(textile.convert(tx), - '

      Header

      \n\ -

      text

      ', tx); + `

      Header

      +

      text

      `, tx); t.end(); }); -test('header with 2 blank lines below', function (t) { - const tx = 'h1. Header\r\n\r\n\r\n\ -text'; +test('header with 2 blank lines below', t => { + const tx = `h1. Header\r +\r +\r +text`; t.is(textile.convert(tx), - '

      Header

      \n\ -

      text

      ', tx); + `

      Header

      +

      text

      `, tx); t.end(); }); -test('header with 1 blank line above', function (t) { - const tx = 'text\r\n\r\n\ -h1. Header'; +test('header with 1 blank line above', t => { + const tx = `text\r +\r +h1. Header`; t.is(textile.convert(tx), - '

      text

      \n\ -

      Header

      ', tx); + `

      text

      +

      Header

      `, tx); t.end(); }); -test('header with 2 blank lines above', function (t) { - const tx = 'text\r\n\r\n\r\n\ -h1. Header'; +test('header with 2 blank lines above', t => { + const tx = `text\r +\r +\r +h1. Header`; t.is(textile.convert(tx), - '

      text

      \n\ -

      Header

      ', tx); + `

      text

      +

      Header

      `, tx); t.end(); }); -test('list line break bug 1', function (t) { - const tx = '* 1\n\ -* 2\n\ -* 3\n\ -'; +test('list line break bug 1', t => { + const tx = `* 1 +* 2 +* 3 +`; t.is(textile.convert(tx), - '
        \n\ -\t
      • 1
      • \n\ -\t
      • 2
      • \n\ -\t
      • 3
      • \n\ -
      ', tx); + `
        +\t
      • 1
      • +\t
      • 2
      • +\t
      • 3
      • +
      `, tx); t.end(); }); -test('list line break bug 2', function (t) { - const tx = '* 1\r\n\ -* 2\r\n\ -* 3\r\n\ -'; +test('list line break bug 2', t => { + const tx = `* 1\r +* 2\r +* 3\r +`; t.is(textile.convert(tx), - '
        \n\ -\t
      • 1
      • \n\ -\t
      • 2
      • \n\ -\t
      • 3
      • \n\ -
      ', tx); + `
        +\t
      • 1
      • +\t
      • 2
      • +\t
      • 3
      • +
      `, tx); t.end(); }); -test('with line breaks', function (t) { - const tx = '- term := you can have line breaks\r\n\ -just like other lists\r\n\ -- line-spanning\r\n\ -term := hey, slick!'; +test('with line breaks', t => { + const tx = `- term := you can have line breaks\r +just like other lists\r +- line-spanning\r +term := hey, slick!`; t.is(textile.convert(tx), - '
      \n\ -\t
      term
      \n\ -\t
      you can have line breaks
      \n\ -just like other lists
      \n\ -\t
      line-spanning
      \n\ -term
      \n\ -\t
      hey, slick!
      \n\ -
      ', tx); + `
      +\t
      term
      +\t
      you can have line breaks
      +just like other lists
      +\t
      line-spanning
      +term
      +\t
      hey, slick!
      +
      `, tx); t.end(); }); -test('double terms', function (t) { - const tx = 'You can have multiple terms before a definition:\r\n\r\n\ -- textile\r\n\ -- fabric\r\n\ -- cloth := woven threads'; +test('double terms', t => { + const tx = `You can have multiple terms before a definition:\r +\r +- textile\r +- fabric\r +- cloth := woven threads`; t.is(textile.convert(tx), - '

      You can have multiple terms before a definition:

      \n\ -
      \n\ -\t
      textile
      \n\ -\t
      fabric
      \n\ -\t
      cloth
      \n\ -\t
      woven threads
      \n\ -
      ', tx); + `

      You can have multiple terms before a definition:

      +
      +\t
      textile
      +\t
      fabric
      +\t
      cloth
      +\t
      woven threads
      +
      `, tx); t.end(); }); -test('not a definition list', function (t) { - const tx = '- textile\r\n\ -- fabric\r\n\ -- cloth'; +test('not a definition list', t => { + const tx = `- textile\r +- fabric\r +- cloth`; t.is(textile.convert(tx), - '

      - textile
      \n\ -- fabric
      \n\ -- cloth

      ', tx); + `

      - textile
      +- fabric
      +- cloth

      `, tx); t.end(); }); -test('long definition list', function (t) { - const tx = 'here is a long definition\r\n\r\n\ -- some term := \r\n\ -*sweet*\r\n\r\n\ -yes\r\n\r\n\ -ok =:\r\n\ -- regular term := no'; +test('long definition list', t => { + const tx = `here is a long definition\r +\r +- some term := \r +*sweet*\r +\r +yes\r +\r +ok =:\r +- regular term := no`; t.is(textile.convert(tx), - '

      here is a long definition

      \n\ -
      \n\ -\t
      some term
      \n\ -\t

      sweet

      \n\ -

      yes

      \n\ -

      ok

      \n\ -\t
      regular term
      \n\ -\t
      no
      \n\ -
      ', tx); + `

      here is a long definition

      +
      +\t
      some term
      +\t

      sweet

      +

      yes

      +

      ok

      +\t
      regular term
      +\t
      no
      +
      `, tx); t.end(); }); diff --git a/test/links.js b/test/links.js index 6c5faf2..117ec14 100644 --- a/test/links.js +++ b/test/links.js @@ -1,8 +1,8 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // links.yml -test('links:1', function (t) { +test('links:1', t => { const tx = '"link text":#1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -11,7 +11,7 @@ test('links:1', function (t) { -test('links:2', function (t) { +test('links:2', t => { const tx = '"link text":#a'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -20,7 +20,7 @@ test('links:2', function (t) { -test('links:3', function (t) { +test('links:3', t => { const tx = '"link text":#a1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -29,7 +29,7 @@ test('links:3', function (t) { -test('links:4', function (t) { +test('links:4', t => { const tx = '"link text":#a10'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -38,7 +38,7 @@ test('links:4', function (t) { -test('links:5', function (t) { +test('links:5', t => { const tx = '"link text":index.html'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -47,7 +47,7 @@ test('links:5', function (t) { -test('links:6', function (t) { +test('links:6', t => { const tx = '"link text":index.html#1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -56,7 +56,7 @@ test('links:6', function (t) { -test('links:7', function (t) { +test('links:7', t => { const tx = '"link text":index.html#a'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -65,7 +65,7 @@ test('links:7', function (t) { -test('links:8', function (t) { +test('links:8', t => { const tx = '"link text":index.html#a1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -74,7 +74,7 @@ test('links:8', function (t) { -test('links:9', function (t) { +test('links:9', t => { const tx = '"link text":index.html#a10'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -83,7 +83,7 @@ test('links:9', function (t) { -test('links:10', function (t) { +test('links:10', t => { const tx = '"link text":http://example.com/'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -92,7 +92,7 @@ test('links:10', function (t) { -test('links:11', function (t) { +test('links:11', t => { const tx = '"link text":http://example.com/#1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -101,7 +101,7 @@ test('links:11', function (t) { -test('links:12', function (t) { +test('links:12', t => { const tx = '"link text":http://example.com/#a'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -110,7 +110,7 @@ test('links:12', function (t) { -test('links:13', function (t) { +test('links:13', t => { const tx = '"link text":http://example.com/#a1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -119,7 +119,7 @@ test('links:13', function (t) { -test('links:14', function (t) { +test('links:14', t => { const tx = '"link text":http://example.com/#a10'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -128,7 +128,7 @@ test('links:14', function (t) { -test('links:15', function (t) { +test('links:15', t => { const tx = '"link text":http://example.com/index.html'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -137,7 +137,7 @@ test('links:15', function (t) { -test('links:16', function (t) { +test('links:16', t => { const tx = '"link text":http://example.com/index.html#a'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -146,7 +146,7 @@ test('links:16', function (t) { -test('links:17', function (t) { +test('links:17', t => { const tx = '"link text":http://example.com/index.html#1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -155,7 +155,7 @@ test('links:17', function (t) { -test('links:18', function (t) { +test('links:18', t => { const tx = '"link text":http://example.com/index.html#a1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -164,7 +164,7 @@ test('links:18', function (t) { -test('links:19', function (t) { +test('links:19', t => { const tx = '"link text":http://example.com/index.html#a10'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -173,7 +173,7 @@ test('links:19', function (t) { -test('links:20', function (t) { +test('links:20', t => { const tx = '"link text":http://example.com/?foo=bar'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -182,7 +182,7 @@ test('links:20', function (t) { -test('links:21', function (t) { +test('links:21', t => { const tx = '"link text":http://example.com/?foo=bar#a'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -191,7 +191,7 @@ test('links:21', function (t) { -test('links:22', function (t) { +test('links:22', t => { const tx = '"link & text":http://example.com/?foo=bar#a'; t.is(textile.convert(tx), '

      link & text

      ', tx); @@ -200,7 +200,7 @@ test('links:22', function (t) { -test('links:23', function (t) { +test('links:23', t => { const tx = '"link text":http://example.com/?foo=bar#1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -209,7 +209,7 @@ test('links:23', function (t) { -test('links:24', function (t) { +test('links:24', t => { const tx = '"link text":http://example.com/?foo=bar#a1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -218,7 +218,7 @@ test('links:24', function (t) { -test('links:25', function (t) { +test('links:25', t => { const tx = '"link text":http://example.com/?foo=bar#a10'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -227,7 +227,7 @@ test('links:25', function (t) { -test('links:26', function (t) { +test('links:26', t => { const tx = '"link text":http://example.com/?foo=bar&a=b'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -236,7 +236,7 @@ test('links:26', function (t) { -test('links:27', function (t) { +test('links:27', t => { const tx = '"link text":http://example.com/?foo=bar&a=b#1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -245,7 +245,7 @@ test('links:27', function (t) { -test('links:28', function (t) { +test('links:28', t => { const tx = '"link text":http://example.com/?foo=bar&a=b#a'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -254,7 +254,7 @@ test('links:28', function (t) { -test('links:29', function (t) { +test('links:29', t => { const tx = '"link text":http://example.com/?foo=bar&a=b#a1'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -263,7 +263,7 @@ test('links:29', function (t) { -test('links:30', function (t) { +test('links:30', t => { const tx = '"link text":http://example.com/?foo=bar&a=b#a10'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -272,7 +272,7 @@ test('links:30', function (t) { -test('links:31', function (t) { +test('links:31', t => { const tx = 'This is a "link":http://example.com/'; t.is(textile.convert(tx), '

      This is a link

      ', tx); @@ -281,7 +281,7 @@ test('links:31', function (t) { -test('links:32', function (t) { +test('links:32', t => { const tx = 'This is a "link":http://example.com/.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -290,7 +290,7 @@ test('links:32', function (t) { -test('links:33', function (t) { +test('links:33', t => { const tx = 'This is a "link":http://example.com/index.html.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -299,7 +299,7 @@ test('links:33', function (t) { -test('links:34', function (t) { +test('links:34', t => { const tx = 'This is a "link":http://example.com/index.html#a.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -308,7 +308,7 @@ test('links:34', function (t) { -test('links:35', function (t) { +test('links:35', t => { const tx = 'This is a "link":http://example.com/index.html#1.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -317,7 +317,7 @@ test('links:35', function (t) { -test('links:36', function (t) { +test('links:36', t => { const tx = 'This is a "link":http://example.com/index.html#a1.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -326,7 +326,7 @@ test('links:36', function (t) { -test('links:37', function (t) { +test('links:37', t => { const tx = 'This is a "link":http://example.com/index.html#a10.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -335,7 +335,7 @@ test('links:37', function (t) { -test('links:38', function (t) { +test('links:38', t => { const tx = 'This is a "link":http://example.com/?foo=bar.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -344,7 +344,7 @@ test('links:38', function (t) { -test('links:39', function (t) { +test('links:39', t => { const tx = 'This is a "link":http://example.com/?foo=bar#1.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -353,7 +353,7 @@ test('links:39', function (t) { -test('links:40', function (t) { +test('links:40', t => { const tx = 'This is a "link":http://example.com/?foo=bar#a.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -362,7 +362,7 @@ test('links:40', function (t) { -test('links:41', function (t) { +test('links:41', t => { const tx = 'This is a "link":http://example.com/?foo=bar#a1.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -371,7 +371,7 @@ test('links:41', function (t) { -test('links:42', function (t) { +test('links:42', t => { const tx = 'This is a "link":http://example.com/?foo=bar#a10.'; t.is(textile.convert(tx), '

      This is a link.

      ', tx); @@ -380,7 +380,7 @@ test('links:42', function (t) { -test('links:43', function (t) { +test('links:43', t => { const tx = 'This is a "link":http://example.com/?foo=bar#a10, but this is not.'; t.is(textile.convert(tx), '

      This is a link, but this is not.

      ', tx); @@ -389,7 +389,7 @@ test('links:43', function (t) { -test('links:44', function (t) { +test('links:44', t => { const tx = '(This is a "link":http://example.com/?foo=bar#a10) but this is not.'; t.is(textile.convert(tx), '

      (This is a link) but this is not.

      ', tx); @@ -398,7 +398,7 @@ test('links:44', function (t) { -test('links:45', function (t) { +test('links:45', t => { const tx = '"link text(link title)":http://example.com/'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -407,7 +407,7 @@ test('links:45', function (t) { -test('link with title attribute', function (t) { +test('link with title attribute', t => { const tx = '"(link) text(link title)":http://example.com/'; t.is(textile.convert(tx), '

      text

      ', tx); @@ -416,7 +416,7 @@ test('link with title attribute', function (t) { -test('link with space between link text and title attribute', function (t) { +test('link with space between link text and title attribute', t => { const tx = '"text (link title)":http://example.com/'; t.is(textile.convert(tx), '

      text

      ', tx); @@ -425,7 +425,7 @@ test('link with space between link text and title attribute', function (t) { -test('links:48', function (t) { +test('links:48', t => { const tx = '"Dive Into XML":http://www.xml.com/pub/au/164'; t.is(textile.convert(tx), '

      Dive Into XML

      ', tx); @@ -434,7 +434,7 @@ test('links:48', function (t) { -test('links:49', function (t) { +test('links:49', t => { const tx = '"Lab Exercises":../lab/exercises/exercises.html.'; t.is(textile.convert(tx), '

      Lab Exercises.

      ', tx); @@ -443,7 +443,7 @@ test('links:49', function (t) { -test('links:50', function (t) { +test('links:50', t => { const tx = 'Go to "discuss":http://www.dreammoods.com/cgibin/cutecast/cutecast.pl?forum=1&thread=26627 to discuss.'; t.is(textile.convert(tx), '

      Go to discuss to discuss.

      ', tx); @@ -452,18 +452,18 @@ test('links:50', function (t) { -test('links:51', function (t) { +test('links:51', t => { const tx = '* "rubylang":http://www.ruby-lang.org/en/'; t.is(textile.convert(tx), - '', tx); + ``, tx); t.end(); }); -test('links:52', function (t) { +test('links:52', t => { const tx = 'The ION coding style document found at "IONCodingStyleGuide.doc":http://perforce:8081/@md=d&cd=//&c=82E@//depot/systest/system/main/pub/doc/IONCodingStyleGuide.doc?ac=22 codifies a couple of rules to ensure reasonably consistent code and documentation of libraries in ION. Test text'; t.is(textile.convert(tx), '

      The ION coding style document found at IONCodingStyleGuide.doc codifies a couple of rules to ensure reasonably consistent code and documentation of libraries in ION. Test text

      ', tx); @@ -472,7 +472,7 @@ test('links:52', function (t) { -test('links:53', function (t) { +test('links:53', t => { const tx = '"testing":'; t.is(textile.convert(tx), '

      “testing”:

      ', tx); @@ -481,7 +481,7 @@ test('links:53', function (t) { -test('trailing space not absorbed by link', function (t) { +test('trailing space not absorbed by link', t => { const tx = '"Link":/foo.html me'; t.is(textile.convert(tx), '

      Link me

      ', tx); @@ -490,7 +490,7 @@ test('trailing space not absorbed by link', function (t) { -test('trailing comma stays outside link', function (t) { +test('trailing comma stays outside link', t => { const tx = '"Link":/foo.html, me'; t.is(textile.convert(tx), '

      Link, me

      ', tx); @@ -499,7 +499,7 @@ test('trailing comma stays outside link', function (t) { -test('trailing exclamation stays outside link', function (t) { +test('trailing exclamation stays outside link', t => { const tx = '"Link":/foo.html! me'; t.is(textile.convert(tx), '

      Link! me

      ', tx); @@ -508,7 +508,7 @@ test('trailing exclamation stays outside link', function (t) { -test('trailing semicolon stays outside link', function (t) { +test('trailing semicolon stays outside link', t => { const tx = '"Link":/foo.html; me'; t.is(textile.convert(tx), '

      Link; me

      ', tx); @@ -517,7 +517,7 @@ test('trailing semicolon stays outside link', function (t) { -test('trailing period stays outside link', function (t) { +test('trailing period stays outside link', t => { const tx = '"Link":/foo.html.'; t.is(textile.convert(tx), '

      Link.

      ', tx); @@ -526,7 +526,7 @@ test('trailing period stays outside link', function (t) { -test('whose text is a parenthetical statement', function (t) { +test('whose text is a parenthetical statement', t => { const tx = '"(just in case you were wondering)":http://slashdot.org/'; t.is(textile.convert(tx), '

      (just in case you were wondering)

      ', tx); @@ -535,7 +535,7 @@ test('whose text is a parenthetical statement', function (t) { -test('that has a class and whose text is a parenthetical statement', function (t) { +test('that has a class and whose text is a parenthetical statement', t => { const tx = '"(myclass) (just in case you were wondering)":http://slashdot.org/'; t.is(textile.convert(tx), '

      (just in case you were wondering)

      ', tx); @@ -544,7 +544,7 @@ test('that has a class and whose text is a parenthetical statement', function (t -test('link containing parentheses', function (t) { +test('link containing parentheses', t => { const tx = '"It is (very) fortunate that this works":http://slashdot.org/'; t.is(textile.convert(tx), '

      It is (very) fortunate that this works

      ', tx); @@ -553,7 +553,7 @@ test('link containing parentheses', function (t) { -test('link containing quotes', function (t) { +test('link containing quotes', t => { const tx = '"He said it is "very unlikely" this works":http://slashdot.org/'; t.is(textile.convert(tx), '

      He said it is “very unlikely” this works

      ', tx); @@ -562,7 +562,7 @@ test('link containing quotes', function (t) { -test('link containing multiple quotes', function (t) { +test('link containing multiple quotes', t => { const tx = '"He said it is "very unlikely" the "economic stimulus" works":http://slashdot.org/'; t.is(textile.convert(tx), '

      He said it is “very unlikely” the “economic stimulus” works

      ', tx); @@ -571,7 +571,7 @@ test('link containing multiple quotes', function (t) { -test('linked quoted phrase', function (t) { +test('linked quoted phrase', t => { const tx = '""Open the pod bay doors please, HAL."":http://www.youtube.com/watch?v=npN9l2Bd06s'; t.is(textile.convert(tx), '

      “Open the pod bay doors please, HAL.”

      ', tx); @@ -580,7 +580,7 @@ test('linked quoted phrase', function (t) { -test('link following quoted phrase', function (t) { +test('link following quoted phrase', t => { const tx = '"quote" text "quote" text "link":http://google.com'; t.is(textile.convert(tx), '

      “quote” text “quote” text link

      ', tx); @@ -589,7 +589,7 @@ test('link following quoted phrase', function (t) { -test('links containing underscores', function (t) { +test('links containing underscores', t => { const tx = 'This is a link to a "Wikipedia article about Barack":http://en.wikipedia.org/wiki/Barack_Obama'; t.is(textile.convert(tx), '

      This is a link to a Wikipedia article about Barack

      ', tx); @@ -598,7 +598,7 @@ test('links containing underscores', function (t) { -test('links containing parentheses', function (t) { +test('links containing parentheses', t => { const tx = 'This is a link to a ["Wikipedia article about Textile":http://en.wikipedia.org/wiki/Textile_(markup_language)]'; t.is(textile.convert(tx), '

      This is a link to a Wikipedia article about Textile

      ', tx); @@ -607,7 +607,7 @@ test('links containing parentheses', function (t) { -test('links contained in parentheses', function (t) { +test('links contained in parentheses', t => { const tx = 'This is a regular link (but in parentheses: "Google":http://www.google.com)'; t.is(textile.convert(tx), '

      This is a regular link (but in parentheses: Google)

      ', tx); @@ -616,7 +616,7 @@ test('links contained in parentheses', function (t) { -test('links containing parentheses without brackets', function (t) { +test('links containing parentheses without brackets', t => { const tx = 'This is a link to a "Wikipedia article about Textile":http://en.wikipedia.org/wiki/Textile_(markup_language)'; t.is(textile.convert(tx), '

      This is a link to a Wikipedia article about Textile

      ', tx); @@ -625,7 +625,7 @@ test('links containing parentheses without brackets', function (t) { -test('links containing parentheses period at end without brackets', function (t) { +test('links containing parentheses period at end without brackets', t => { const tx = 'This is a link to a "Wikipedia article about Textile":http://en.wikipedia.org/wiki/Textile_(markup_language).'; t.is(textile.convert(tx), '

      This is a link to a Wikipedia article about Textile.

      ', tx); @@ -634,7 +634,7 @@ test('links containing parentheses period at end without brackets', function (t) -test('broken links containing parentheses without brackets', function (t) { +test('broken links containing parentheses without brackets', t => { const tx = 'This is a link to a "Wikipedia article about Textile":http://en.wikipedia.org/wiki/Textile_(markup_language'; t.is(textile.convert(tx), '

      This is a link to a Wikipedia article about Textile

      ', tx); @@ -643,7 +643,7 @@ test('broken links containing parentheses without brackets', function (t) { -test('links containing parentheses without brackets inside a parenthesis', function (t) { +test('links containing parentheses without brackets inside a parenthesis', t => { const tx = 'Textile is awesome! (Check out the "Wikipedia article about Textile":http://en.wikipedia.org/wiki/Textile_(markup_language))'; t.is(textile.convert(tx), '

      Textile is awesome! (Check out the Wikipedia article about Textile)

      ', tx); @@ -652,7 +652,7 @@ test('links containing parentheses without brackets inside a parenthesis', funct -test('quotes and follow link', function (t) { +test('quotes and follow link', t => { const tx = 'Some "text" followed by a "link":http://redcloth.org.'; t.is(textile.convert(tx), '

      Some “text” followed by a link.

      ', tx); @@ -661,9 +661,10 @@ test('quotes and follow link', function (t) { -test('link alias containing dashes', function (t) { - const tx = '"link":google-rocks\n\n\ -[google-rocks]http://google.com'; +test('link alias containing dashes', t => { + const tx = `"link":google-rocks + +[google-rocks]http://google.com`; t.is(textile.convert(tx), '

      link

      ', tx); t.end(); @@ -671,29 +672,31 @@ test('link alias containing dashes', function (t) { -test('contained in multi-paragraph quotes', function (t) { - const tx = "\"I first learned about \"Redcloth\":http://redcloth.org/ several years ago.\n\n\ -\"It's wonderful.\""; +test('contained in multi-paragraph quotes', t => { + const tx = `"I first learned about "Redcloth":http://redcloth.org/ several years ago. + +"It's wonderful."`; t.is(textile.convert(tx), - '

      “I first learned about Redcloth several years ago.

      \n\ -

      “It’s wonderful.”

      ', tx); + `

      “I first learned about Redcloth several years ago.

      +

      “It’s wonderful.”

      `, tx); t.end(); }); -test('as html in notextile contained in multi-paragraph quotes', function (t) { - const tx = '"Here is a link.\n\n\ -"I like links."'; +test('as html in notextile contained in multi-paragraph quotes', t => { + const tx = `"Here is a link. + +"I like links."`; t.is(textile.convert(tx), - '

      “Here is a link.

      \n\ -

      “I like links.”

      ', tx); + `

      “Here is a link.

      +

      “I like links.”

      `, tx); t.end(); }); -test('contained in para with multiple quotes', function (t) { +test('contained in para with multiple quotes', t => { const tx = '"My wife, Tipper, and I will donate 100% of the proceeds of the award to the "Alliance For Climate Protection":http://www.looktothestars.org/charity/638-alliance-for-climate-protection," said Gore in an email. "I am deeply honored to receive the Nobel Peace Prize."'; t.is(textile.convert(tx), '

      “My wife, Tipper, and I will donate 100% of the proceeds of the award to the Alliance For Climate Protection,” said Gore in an email. “I am deeply honored to receive the Nobel Peace Prize.”

      ', tx); @@ -702,7 +705,7 @@ test('contained in para with multiple quotes', function (t) { -test('with caps in the title', function (t) { +test('with caps in the title', t => { const tx = '"British Skin Foundation (BSF)":http://www.britishskinfoundation.org.uk'; t.is(textile.convert(tx), '

      British Skin Foundation

      ', tx); @@ -711,7 +714,7 @@ test('with caps in the title', function (t) { -test('containing HTML tags with quotes', function (t) { +test('containing HTML tags with quotes', t => { const tx = '"Apply online*apply online*":/admissions/apply/'; t.is(textile.convert(tx), '

      Apply onlineapply online

      ', tx); diff --git a/test/lists.js b/test/lists.js index adfd0ef..928e3e3 100644 --- a/test/lists.js +++ b/test/lists.js @@ -1,522 +1,538 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // lists.yml -test('code in bullet list', function (t) { +test('code in bullet list', t => { const tx = '* command run: @time ruby run-tests.rb > toto@'; t.is(textile.convert(tx), - '
        \n\ -\t
      • command run: time ruby run-tests.rb > toto
      • \n\ -
      ', tx); + `
        +\t
      • command run: time ruby run-tests.rb > toto
      • +
      `, tx); t.end(); }); -test('hard break in list', function (t) { - const tx = '* first line\n\ -* second\n\ - line\n\ -* third line'; +test('hard break in list', t => { + const tx = `* first line +* second + line +* third line`; t.is(textile.convert(tx), - '
        \n\ -\t
      • first line
      • \n\ -\t
      • second
        \n\ -line
      • \n\ -\t
      • third line
      • \n\ -
      ', tx); + `
        +\t
      • first line
      • +\t
      • second
        +line
      • +\t
      • third line
      • +
      `, tx); t.end(); }); -test('mixed nesting', function (t) { - const tx = '* bullet\n\ -*# number\n\ -*# number\n\ -*#* bullet\n\ -*# number\n\ -*# number with\n\ -a break\n\ -* bullet\n\ -** okay'; +test('mixed nesting', t => { + const tx = `* bullet +*# number +*# number +*#* bullet +*# number +*# number with +a break +* bullet +** okay`; t.is(textile.convert(tx), - '
        \n\ -\t
      • bullet\n\ -\t
          \n\ -\t\t
        1. number
        2. \n\ -\t\t
        3. number\n\ -\t\t
            \n\ -\t\t\t
          • bullet
          • \n\ -\t\t
        4. \n\ -\t\t
        5. number
        6. \n\ -\t\t
        7. number with
          \n\ -a break
        8. \n\ -\t
      • \n\ -\t
      • bullet\n\ -\t
          \n\ -\t\t
        • okay
        • \n\ -\t
      • \n\ -
      ', tx); + `
        +\t
      • bullet +\t
          +\t\t
        1. number
        2. +\t\t
        3. number +\t\t
            +\t\t\t
          • bullet
          • +\t\t
        4. +\t\t
        5. number
        6. +\t\t
        7. number with
          +a break
        8. +\t
      • +\t
      • bullet +\t
          +\t\t
        • okay
        • +\t
      • +
      `, tx); t.end(); }); -test('list continuation', function (t) { - const tx = '# one\n\ -# two\n\ -# three\n\n\ -# one\n\ -# two\n\ -# three\n\n\ -#_ four\n\ -# five\n\ -# six'; +test('list continuation', t => { + const tx = `# one +# two +# three + +# one +# two +# three + +#_ four +# five +# six`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      \n\ -
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      \n\ -
        \n\ -\t
      1. four
      2. \n\ -\t
      3. five
      4. \n\ -\t
      5. six
      6. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      +
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      +
        +\t
      1. four
      2. +\t
      3. five
      4. +\t
      5. six
      6. +
      `, tx); t.end(); }); -test('continue after break', function (t) { - const tx = '# one\n\ -# two\n\ -# three\n\n\ -test\n\n\ -#_ four\n\ -# five\n\ -# six\n\n\ -test\n\n\ -#_ seven\n\ -# eight\n\ -# nine'; +test('continue after break', t => { + const tx = `# one +# two +# three + +test + +#_ four +# five +# six + +test + +#_ seven +# eight +# nine`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      \n\ -

      test

      \n\ -
        \n\ -\t
      1. four
      2. \n\ -\t
      3. five
      4. \n\ -\t
      5. six
      6. \n\ -
      \n\ -

      test

      \n\ -
        \n\ -\t
      1. seven
      2. \n\ -\t
      3. eight
      4. \n\ -\t
      5. nine
      6. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      +

      test

      +
        +\t
      1. four
      2. +\t
      3. five
      4. +\t
      5. six
      6. +
      +

      test

      +
        +\t
      1. seven
      2. +\t
      3. eight
      4. +\t
      5. nine
      6. +
      `, tx); t.end(); }); -test('continue list when prior list contained nested list', function (t) { - const tx = '# one\n\ -# two\n\ -# three\n\n\ -#_ four\n\ -# five\n\ -## sub-note\n\ -## another sub-note\n\ -# six\n\n\ -#_ seven\n\ -# eight\n\ -# nine'; +test('continue list when prior list contained nested list', t => { + const tx = `# one +# two +# three + +#_ four +# five +## sub-note +## another sub-note +# six + +#_ seven +# eight +# nine`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      \n\ -
        \n\ -\t
      1. four
      2. \n\ -\t
      3. five\n\ -\t
          \n\ -\t\t
        1. sub-note
        2. \n\ -\t\t
        3. another sub-note
        4. \n\ -\t
      4. \n\ -\t
      5. six
      6. \n\ -
      \n\ -
        \n\ -\t
      1. seven
      2. \n\ -\t
      3. eight
      4. \n\ -\t
      5. nine
      6. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      +
        +\t
      1. four
      2. +\t
      3. five +\t
          +\t\t
        1. sub-note
        2. +\t\t
        3. another sub-note
        4. +\t
      4. +\t
      5. six
      6. +
      +
        +\t
      1. seven
      2. +\t
      3. eight
      4. +\t
      5. nine
      6. +
      `, tx); t.end(); }); -test('list start number', function (t) { - const tx = '#293 two ninety three\n\ -# two ninety four\n\ -# two ninety five\n\n\ -#9 nine\n\ -# ten\n\ -# eleven'; +test('list start number', t => { + const tx = `#293 two ninety three +# two ninety four +# two ninety five + +#9 nine +# ten +# eleven`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. two ninety three
      2. \n\ -\t
      3. two ninety four
      4. \n\ -\t
      5. two ninety five
      6. \n\ -
      \n\ -
        \n\ -\t
      1. nine
      2. \n\ -\t
      3. ten
      4. \n\ -\t
      5. eleven
      6. \n\ -
      ', tx); + `
        +\t
      1. two ninety three
      2. +\t
      3. two ninety four
      4. +\t
      5. two ninety five
      6. +
      +
        +\t
      1. nine
      2. +\t
      3. ten
      4. +\t
      5. eleven
      6. +
      `, tx); t.end(); }); -test('continue list after started list', function (t) { - const tx = '#9 nine\n\ -# ten\n\ -# eleven\n\n\ -#_ twelve\n\ -# thirteen\n\ -# fourteen'; +test('continue list after started list', t => { + const tx = `#9 nine +# ten +# eleven + +#_ twelve +# thirteen +# fourteen`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. nine
      2. \n\ -\t
      3. ten
      4. \n\ -\t
      5. eleven
      6. \n\ -
      \n\ -
        \n\ -\t
      1. twelve
      2. \n\ -\t
      3. thirteen
      4. \n\ -\t
      5. fourteen
      6. \n\ -
      ', tx); + `
        +\t
      1. nine
      2. +\t
      3. ten
      4. +\t
      5. eleven
      6. +
      +
        +\t
      1. twelve
      2. +\t
      3. thirteen
      4. +\t
      5. fourteen
      6. +
      `, tx); t.end(); }); -test('end notes', function (t) { - const tx = 'h2. End Notes\n\n\ -# End Notes should be a numbered list\n\ -# Like this\n\ -# They must have anchors in the text\n\n\ -h2. See Also\n\n\ -* See Also notes should be bullets\n\ -* Like this\n\ -'; +test('end notes', t => { + const tx = `h2. End Notes + +# End Notes should be a numbered list +# Like this +# They must have anchors in the text + +h2. See Also + +* See Also notes should be bullets +* Like this +`; t.is(textile.convert(tx), - '

      End Notes

      \n\ -
        \n\ -\t
      1. End Notes should be a numbered list
      2. \n\ -\t
      3. Like this
      4. \n\ -\t
      5. They must have anchors in the text
      6. \n\ -
      \n\ -

      See Also

      \n\ -
        \n\ -\t
      • See Also notes should be bullets
      • \n\ -\t
      • Like this
      • \n\ -
      ', tx); + `

      End Notes

      +
        +\t
      1. End Notes should be a numbered list
      2. +\t
      3. Like this
      4. +\t
      5. They must have anchors in the text
      6. +
      +

      See Also

      +
        +\t
      • See Also notes should be bullets
      • +\t
      • Like this
      • +
      `, tx); t.end(); }); -test('ordered list immediately following paragraph', function (t) { - const tx = 'A simple example.\n\ -# One\n\ -# Two'; +test('ordered list immediately following paragraph', t => { + const tx = `A simple example. +# One +# Two`; t.is(textile.convert(tx), - '

      A simple example.

      \n\ -
        \n\ -\t
      1. One
      2. \n\ -\t
      3. Two
      4. \n\ -
      ', tx); + `

      A simple example.

      +
        +\t
      1. One
      2. +\t
      3. Two
      4. +
      `, tx); t.end(); }); -test('unordered list immediately following paragraph', function (t) { - const tx = 'A simple example.\n\ -* One\n\ -* Two'; +test('unordered list immediately following paragraph', t => { + const tx = `A simple example. +* One +* Two`; t.is(textile.convert(tx), - '

      A simple example.

      \n\ -
        \n\ -\t
      • One
      • \n\ -\t
      • Two
      • \n\ -
      ', tx); + `

      A simple example.

      +
        +\t
      • One
      • +\t
      • Two
      • +
      `, tx); t.end(); }); -test('ordered list immediately following extended block', function (t) { - const tx = 'div.. Here it comes.\n\n\ -A simple example.\n\ -# One\n\ -# Two'; +test('ordered list immediately following extended block', t => { + const tx = `div.. Here it comes. + +A simple example. +# One +# Two`; t.is(textile.convert(tx), - '
      Here it comes.
      \n\ -
      A simple example.
      \n\ -
        \n\ -\t
      1. One
      2. \n\ -\t
      3. Two
      4. \n\ -
      ', tx); + `
      Here it comes.
      +
      A simple example.
      +
        +\t
      1. One
      2. +\t
      3. Two
      4. +
      `, tx); t.end(); }); -test('unordered list immediately following extended block', function (t) { - const tx = 'div.. Here it comes.\n\n\ -A simple example.\n\ -* One\n\ -* Two'; +test('unordered list immediately following extended block', t => { + const tx = `div.. Here it comes. + +A simple example. +* One +* Two`; t.is(textile.convert(tx), - '
      Here it comes.
      \n\ -
      A simple example.
      \n\ -
        \n\ -\t
      • One
      • \n\ -\t
      • Two
      • \n\ -
      ', tx); + `
      Here it comes.
      +
      A simple example.
      +
        +\t
      • One
      • +\t
      • Two
      • +
      `, tx); t.end(); }); -test('unordered with classes', function (t) { - const tx = '*(class-one) one\n\ -*(class-two) two\n\ -*(class-three) three'; +test('unordered with classes', t => { + const tx = `*(class-one) one +*(class-two) two +*(class-three) three`; t.is(textile.convert(tx), - '
        \n\ -\t
      • one
      • \n\ -\t
      • two
      • \n\ -\t
      • three
      • \n\ -
      ', tx); + `
        +\t
      • one
      • +\t
      • two
      • +\t
      • three
      • +
      `, tx); t.end(); }); -test('unordered with alignments', function (t) { - const tx = '*< one\n\ -*> two\n\ -*<> three\n\ -*= four'; +test('unordered with alignments', t => { + const tx = `*< one +*> two +*<> three +*= four`; t.is(textile.convert(tx), - '
        \n\ -\t
      • one
      • \n\ -\t
      • two
      • \n\ -\t
      • three
      • \n\ -\t
      • four
      • \n\ -
      ', tx); + `
        +\t
      • one
      • +\t
      • two
      • +\t
      • three
      • +\t
      • four
      • +
      `, tx); t.end(); }); -test('with attributes that apply to the whole list', function (t) { - const tx = '#(class#id) one\n\ -# two\n\ -# three'; +test('with attributes that apply to the whole list', t => { + const tx = `#(class#id) one +# two +# three`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      `, tx); t.end(); }); -test('with id on the list', function (t) { - const tx = '#(#my-id) one\n\ -# two\n\ -# three'; +test('with id on the list', t => { + const tx = `#(#my-id) one +# two +# three`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      `, tx); t.end(); }); -test('with class on the list', function (t) { - const tx = '#(my-class) one\n\ -# two\n\ -# three'; +test('with class on the list', t => { + const tx = `#(my-class) one +# two +# three`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      `, tx); t.end(); }); -test('with id on the list item', function (t) { - const tx = '# one\n\ -#(#my-item) two\n\ -# three'; +test('with id on the list item', t => { + const tx = `# one +#(#my-item) two +# three`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      `, tx); t.end(); }); -test('with attributes that apply to the first list item', function (t) { - const tx = '#.\n\ -#(class#id) one\n\ -# two\n\ -# three'; +test('with attributes that apply to the first list item', t => { + const tx = `#. +#(class#id) one +# two +# three`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      `, tx); t.end(); }); -test('changed from textism basics', function (t) { - const tx = '#{color:blue}.\n\ -# one\n\ -# two\n\ -# three'; +test('changed from textism basics', t => { + const tx = `#{color:blue}. +# one +# two +# three`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      `, tx); t.end(); }); -test('item and list attributes', function (t) { - const tx = '#(class#id).\n\ -#(first) Item 1\n\ -#(second) Item 2\n\ -#(third) Item 3'; +test('item and list attributes', t => { + const tx = `#(class#id). +#(first) Item 1 +#(second) Item 2 +#(third) Item 3`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. Item 1
      2. \n\ -\t
      3. Item 2
      4. \n\ -\t
      5. Item 3
      6. \n\ -
      ', tx); + `
        +\t
      1. Item 1
      2. +\t
      3. Item 2
      4. +\t
      5. Item 3
      6. +
      `, tx); t.end(); }); -test('with one padding-left increment', function (t) { +test('with one padding-left increment', t => { const tx = '#( one'; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +
      `, tx); t.end(); }); -test('with two padding-left increments', function (t) { +test('with two padding-left increments', t => { const tx = '#(( two'; t.is(textile.convert(tx), - '
        \n\ -\t
      1. two
      2. \n\ -
      ', tx); + `
        +\t
      1. two
      2. +
      `, tx); t.end(); }); -test('with one padding-right increment', function (t) { +test('with one padding-right increment', t => { const tx = '#) one'; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +
      `, tx); t.end(); }); -test('with padding-left and padding-right increments', function (t) { +test('with padding-left and padding-right increments', t => { const tx = '#() two'; t.is(textile.convert(tx), - '
        \n\ -\t
      1. two
      2. \n\ -
      ', tx); + `
        +\t
      1. two
      2. +
      `, tx); t.end(); }); -test('with padding-left and padding-right increments switched', function (t) { +test('with padding-left and padding-right increments switched', t => { const tx = '#)( two'; t.is(textile.convert(tx), - '
        \n\ -\t
      1. two
      2. \n\ -
      ', tx); + `
        +\t
      1. two
      2. +
      `, tx); t.end(); }); -test('list control items occuring-mid list should be ignored', function (t) { - const tx = '# one\n\ -# two\n\ -#.\n\ -# tree'; +test('list control items occuring-mid list should be ignored', t => { + const tx = `# one +# two +#. +# tree`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. tree
      6. \n\ -
      ', tx); + `
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. tree
      6. +
      `, tx); t.end(); }); -test('complicated case with continues and classes', function (t) { - const tx = '#(class#id).\n\ -#(first) Item 1\n\ -##.\n\ -##(sub1) Sub item 1\n\ -## Sub item 2\n\ -#(second) Item 2\n\ -##_(sub3) Sub item 3\n\ -## Sub item 4\n\n\ -#_(third) Item 3\n\ -##_(sub5) Sub item 5\n\ -## Sub item 6'; +test('complicated case with continues and classes', t => { + const tx = `#(class#id). +#(first) Item 1 +##. +##(sub1) Sub item 1 +## Sub item 2 +#(second) Item 2 +##_(sub3) Sub item 3 +## Sub item 4 + +#_(third) Item 3 +##_(sub5) Sub item 5 +## Sub item 6`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. Item 1\n\ -\t
          \n\ -\t\t
        1. Sub item 1
        2. \n\ -\t\t
        3. Sub item 2
        4. \n\ -\t
      2. \n\ -\t
      3. Item 2\n\ -\t
          \n\ -\t\t
        1. Sub item 3
        2. \n\ -\t\t
        3. Sub item 4
        4. \n\ -\t
      4. \n\ -
      \n\ -
        \n\ -\t
      1. Item 3\n\ -\t
          \n\ -\t\t
        1. Sub item 5
        2. \n\ -\t\t
        3. Sub item 6
        4. \n\ -\t
      2. \n\ -
      ', tx); + `
        +\t
      1. Item 1 +\t
          +\t\t
        1. Sub item 1
        2. +\t\t
        3. Sub item 2
        4. +\t
      2. +\t
      3. Item 2 +\t
          +\t\t
        1. Sub item 3
        2. +\t\t
        3. Sub item 4
        4. +\t
      4. +
      +
        +\t
      1. Item 3 +\t
          +\t\t
        1. Sub item 5
        2. +\t\t
        3. Sub item 6
        4. +\t
      2. +
      `, tx); t.end(); }); diff --git a/test/options.js b/test/options.js index 35ac2f7..da4dd66 100644 --- a/test/options.js +++ b/test/options.js @@ -1,7 +1,7 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; -test('jstextile options', function (t) { +test('jstextile options', t => { const paragraph = 'Some paragraph\nwith a linebreak.'; // By default, inline linebreaks will be converted to html linebreaks t.is(textile.convert(paragraph), @@ -11,7 +11,7 @@ test('jstextile options', function (t) { t.end(); }); -test('jstextile options', function (t) { +test('jstextile options', t => { // linebreak option works in tables t.is(textile.convert('|a|b\nc|d|\n|a|b|c|\n'), '\n' + @@ -42,7 +42,7 @@ test('jstextile options', function (t) { t.end(); }); -test('jstextile options', function (t) { +test('jstextile options', t => { const paragraph = 'Some paragraph\nwith a linebreak.'; const savedOptions = {}; for (const k in textile.defaults) { diff --git a/test/poignant.js b/test/poignant.js index 2ef71d4..0951275 100644 --- a/test/poignant.js +++ b/test/poignant.js @@ -1,57 +1,69 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // poignant.yml -test('poignant:1', function (t) { - const tx = "h3. False\n\n\ -!\n\ - if plastic_cup\n\ - print \"Plastic cup is on the up 'n' up!\"\n\ - end\n\ -\n\n\ -If @plastic_cup@ contains either @nil@ or @false@, you won't see anything print to the screen. They're not on the @if@ guest list. So @if@ isn't going to run any of the code it's protecting.\n\n\ -But @nil@ and @false@ need not walk away in shame. They may be of questionable character, but @unless@ runs a smaller establishment that caters to the bedraggled. The @unless@ keyword has a policy of only allowing those with a negative charge in. Who are: @nil@ and @false@.\n\n\ -
      \n\
      -  unless plastic_cup\n\
      -    print \"Plastic cup is on the down low.\"\n\
      -  end\n\
      -
      \n\n\ -You can also use @if@ and @unless@ at the end of a single line of code, if that's all that is being protected.\n\n\ -
      \n\
      -  print \"Yeah, plastic cup is up again!\" if plastic_cup\n\
      -  print \"Hardly. It's down.\" unless plastic_cup\n\
      -
      \n\n\ -Now that you've met @false@, I'm sure you can see what's on next."; +test('poignant:1', t => { + const tx = `h3. False + +! + if plastic_cup + print "Plastic cup is on the up 'n' up!" + end + + +If @plastic_cup@ contains either @nil@ or @false@, you won't see anything print to the screen. They're not on the @if@ guest list. So @if@ isn't going to run any of the code it's protecting. + +But @nil@ and @false@ need not walk away in shame. They may be of questionable character, but @unless@ runs a smaller establishment that caters to the bedraggled. The @unless@ keyword has a policy of only allowing those with a negative charge in. Who are: @nil@ and @false@. + +
      +  unless plastic_cup
      +    print "Plastic cup is on the down low."
      +  end
      +
      + +You can also use @if@ and @unless@ at the end of a single line of code, if that's all that is being protected. + +
      +  print "Yeah, plastic cup is up again!" if plastic_cup
      +  print "Hardly. It's down." unless plastic_cup
      +
      + +Now that you've met @false@, I'm sure you can see what's on next.`; t.is(textile.convert(tx), - "

      False

      \n\ -

      \"Shape

      \n\ -

      The cat Trady Blix. Frozen in emptiness. Immaculate whiskers rigid. Placid eyes of lake. Tail of warm icicle. Sponsored by a Very Powerful Pause Button.

      \n\ -

      The darkness surrounding Blix can be called negative space. Hang on to that phrase. Let it suggest that the emptiness has a negative connotation. In a similar way, nil has a slightly sour note that it whistles.

      \n\ -

      Generally speaking, everything in Ruby has a positive charge to it. This spark flows through strings, numbers, regexps, all of it. Only two keywords wear a shady cloak: nil and false draggin us down.

      \n\ -

      You can test that charge with an if keyword. It looks very much like the do blocks we saw in the last chapter, in that both end with an end.

      \n\ -
      \n\
      -  if plastic_cup\n\
      -    print \"Plastic cup is on the up 'n' up!\"\n\
      -  end\n\
      -
      \n\ -

      If plastic_cup contains either nil or false, you won’t see anything print to the screen. They’re not on the if guest list. So if isn’t going to run any of the code it’s protecting.

      \n\ -

      But nil and false need not walk away in shame. They may be of questionable character, but unless runs a smaller establishment that caters to the bedraggled. The unless keyword has a policy of only allowing those with a negative charge in. Who are: nil and false.

      \n\ -
      \n\
      -  unless plastic_cup\n\
      -    print \"Plastic cup is on the down low.\"\n\
      -  end\n\
      -
      \n\ -

      You can also use if and unless at the end of a single line of code, if that’s all that is being protected.

      \n\ -
      \n\
      -  print \"Yeah, plastic cup is up again!\" if plastic_cup\n\
      -  print \"Hardly. It's down.\" unless plastic_cup\n\
      -
      \n\ -

      Now that you’ve met false, I’m sure you can see what’s on next.

      ", tx); + `

      False

      +

      Shape of a cat.

      +

      The cat Trady Blix. Frozen in emptiness. Immaculate whiskers rigid. Placid eyes of lake. Tail of warm icicle. Sponsored by a Very Powerful Pause Button.

      +

      The darkness surrounding Blix can be called negative space. Hang on to that phrase. Let it suggest that the emptiness has a negative connotation. In a similar way, nil has a slightly sour note that it whistles.

      +

      Generally speaking, everything in Ruby has a positive charge to it. This spark flows through strings, numbers, regexps, all of it. Only two keywords wear a shady cloak: nil and false draggin us down.

      +

      You can test that charge with an if keyword. It looks very much like the do blocks we saw in the last chapter, in that both end with an end.

      +
      +  if plastic_cup
      +    print "Plastic cup is on the up 'n' up!"
      +  end
      +
      +

      If plastic_cup contains either nil or false, you won’t see anything print to the screen. They’re not on the if guest list. So if isn’t going to run any of the code it’s protecting.

      +

      But nil and false need not walk away in shame. They may be of questionable character, but unless runs a smaller establishment that caters to the bedraggled. The unless keyword has a policy of only allowing those with a negative charge in. Who are: nil and false.

      +
      +  unless plastic_cup
      +    print "Plastic cup is on the down low."
      +  end
      +
      +

      You can also use if and unless at the end of a single line of code, if that’s all that is being protected.

      +
      +  print "Yeah, plastic cup is up again!" if plastic_cup
      +  print "Hardly. It's down." unless plastic_cup
      +
      +

      Now that you’ve met false, I’m sure you can see what’s on next.

      `, tx); t.end(); }); diff --git a/test/source-offsets.js b/test/source-offsets.js index a7dbbfd..dc4917e 100644 --- a/test/source-offsets.js +++ b/test/source-offsets.js @@ -1,5 +1,5 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import { parseTree } from '../src/index.js'; function simplify (node) { const tag = node.tagName || 'ROOT'; @@ -12,7 +12,7 @@ function simplify (node) { } function parse (tx) { - const tree = textile.parseTree(tx); + const tree = parseTree(tx); return simplify(tree); } diff --git a/test/table.js b/test/table.js index c43b627..267d5d7 100644 --- a/test/table.js +++ b/test/table.js @@ -1,454 +1,456 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // table.yml -test('table:1', function (t) { - const tx = '|a|b|c|\n\ -|1|2|3|\n\n\ -h3. A header after the table'; +test('table:1', t => { + const tx = `|a|b|c| +|1|2|3| + +h3. A header after the table`; t.is(textile.convert(tx), - '
      \n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      abc
      123
      \n\ -

      A header after the table

      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
      abc
      123
      +

      A header after the table

      `, tx); t.end(); }); -test('table:2', function (t) { - const tx = '|_. a|_. b|_. c|\n\ -|1|2|3|'; +test('table:2', t => { + const tx = `|_. a|_. b|_. c| +|1|2|3|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      abc
      123
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
      abc
      123
      `, tx); t.end(); }); -test('table:3', function (t) { - const tx = '|This|is|a|simple|table|\n\ -|This|is|a|simple|row|'; +test('table:3', t => { + const tx = `|This|is|a|simple|table| +|This|is|a|simple|row|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      Thisisasimpletable
      Thisisasimplerow
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +
      Thisisasimpletable
      Thisisasimplerow
      `, tx); t.end(); }); -test('table:4', function (t) { - const tx = 'table{border:1px solid black}.\n\ -|This|is|a|row|\n\ -|This|is|a|row|'; +test('table:4', t => { + const tx = `table{border:1px solid black}. +|This|is|a|row| +|This|is|a|row|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      Thisisarow
      Thisisarow
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t +
      Thisisarow
      Thisisarow
      `, tx); t.end(); }); -test('table:5', function (t) { +test('table:5', t => { const tx = '{background:#ddd}. |This|is|a|row|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      Thisisarow
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t\t +\t +
      Thisisarow
      `, tx); t.end(); }); -test('table:6', function (t) { - const tx = '|a|b|c|\n\ -| |2|3|'; +test('table:6', t => { + const tx = `|a|b|c| +| |2|3|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      abc
      23
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
      abc
      23
      `, tx); t.end(); }); -test('table:7', function (t) { - const tx = 'table{width: 200px; border:2px solid gray;}.\n\ -|_=. Alignment|\n\ -|=. centered|\n\ -|=(. a bit right|\n\ -|=). a bit left|\n\ -|>). almost right|\n\ -|<(. almost left|\n\ -|>. right|\n\ -|<. left|'; +test('table:7', t => { + const tx = `table{width: 200px; border:2px solid gray;}. +|_=. Alignment| +|=. centered| +|=(. a bit right| +|=). a bit left| +|>). almost right| +|<(. almost left| +|>. right| +|<. left|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -
      Alignment
      centered
      a bit right
      a bit left
      almost right
      almost left
      right
      left
      ', tx); + ` +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +
      Alignment
      centered
      a bit right
      a bit left
      almost right
      almost left
      right
      left
      `, tx); t.end(); }); -test('table:8', function (t) { - const tx = '|{background:#ddd}. Cell with gray background|Normal cell|\n\ -|\\2. Cell spanning 2 columns|\n\ -|/2. Cell spanning 2 rows|one|\n\ -|two|\n\ -|>. Right-aligned cell|<. Left-aligned cell|'; +test('table:8', t => { + const tx = `|{background:#ddd}. Cell with gray background|Normal cell| +|\\2. Cell spanning 2 columns| +|/2. Cell spanning 2 rows|one| +|two| +|>. Right-aligned cell|<. Left-aligned cell|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      Cell with gray backgroundNormal cell
      Cell spanning 2 columns
      Cell spanning 2 rowsone
      two
      Right-aligned cellLeft-aligned cell
      ', tx); + ` +\t +\t\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t\t +\t +
      Cell with gray backgroundNormal cell
      Cell spanning 2 columns
      Cell spanning 2 rowsone
      two
      Right-aligned cellLeft-aligned cell
      `, tx); t.end(); }); -test('row spanning mid-row', function (t) { - const tx = '|1|2|3|\n\ -|1|/3. 2|3|\n\ -|1|3|\n\ -|1|3|\n\ -|1|2|3|'; +test('row spanning mid-row', t => { + const tx = `|1|2|3| +|1|/3. 2|3| +|1|3| +|1|3| +|1|2|3|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      123
      123
      13
      13
      123
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
      123
      123
      13
      13
      123
      `, tx); t.end(); }); -test('table:10', function (t) { - const tx = '{background:#ddd}. |S|Target|Complete|App|Milestone|\n\ -|!/i/g.gif!|11/29/04|11/29/04|011|XML spec complete (KH is on schedule)|\n\ -|!/i/g.gif!|11/22/04|11/22/04|070|Dialog pass 1 builds an index file|\n\ -|!/i/g.gif!|11/24/04|11/24/04|070|Dialog pass 2 98% complete|\n\ -|!/i/g.gif!|11/30/04|11/30/04|070|Feature complete. Passes end-to-end smoke test.|\n\ -|!/i/w.gif!|12/02/04| |011|Dialog pass 1 and 2 complete (98+%)|\n\ -|!/i/w.gif!|12/03/04| |081|Feature complete|'; +test('table:10', t => { + const tx = `{background:#ddd}. |S|Target|Complete|App|Milestone| +|!/i/g.gif!|11/29/04|11/29/04|011|XML spec complete (KH is on schedule)| +|!/i/g.gif!|11/22/04|11/22/04|070|Dialog pass 1 builds an index file| +|!/i/g.gif!|11/24/04|11/24/04|070|Dialog pass 2 98% complete| +|!/i/g.gif!|11/30/04|11/30/04|070|Feature complete. Passes end-to-end smoke test.| +|!/i/w.gif!|12/02/04| |011|Dialog pass 1 and 2 complete (98+%)| +|!/i/w.gif!|12/03/04| |081|Feature complete|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      STargetCompleteAppMilestone
      11/29/0411/29/04011XML spec complete (KH is on schedule)
      11/22/0411/22/04070Dialog pass 1 builds an index file
      11/24/0411/24/04070Dialog pass 2 98% complete
      11/30/0411/30/04070Feature complete. Passes end-to-end smoke test.
      12/02/04 011Dialog pass 1 and 2 complete (98+%)
      12/03/04 081Feature complete
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +
      STargetCompleteAppMilestone
      11/29/0411/29/04011XML spec complete (KH is on schedule)
      11/22/0411/22/04070Dialog pass 1 builds an index file
      11/24/0411/24/04070Dialog pass 2 98% complete
      11/30/0411/30/04070Feature complete. Passes end-to-end smoke test.
      12/02/04 011Dialog pass 1 and 2 complete (98+%)
      12/03/04 081Feature complete
      `, tx); t.end(); }); -test('combined table header and colspan', function (t) { - const tx = 'table(my_class).\n\ -|_\\2. a |_. b |_. c |\n\ -| 1 | 2 | 3 | 4 |'; +test('combined table header and colspan', t => { + const tx = `table(my_class). +|_\\2. a |_. b |_. c | +| 1 | 2 | 3 | 4 |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      a b c
      1 2 3 4
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t +
      a b c
      1 2 3 4
      `, tx); t.end(); }); -test('two adjacent tables', function (t) { - const tx = '|a|b|c|\n\n\ -|1|2|3|'; +test('two adjacent tables', t => { + const tx = `|a|b|c| + +|1|2|3|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      abc
      \n\ -\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      123
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +
      abc
      + +\t +\t\t +\t\t +\t\t +\t +
      123
      `, tx); t.end(); }); -test('with cell attributes', function (t) { +test('with cell attributes', t => { const tx = '|[en]. lang-ok|{color:red;}. style-ok|(myclass). class-ok|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      lang-okstyle-okclass-ok
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +
      lang-okstyle-okclass-ok
      `, tx); t.end(); }); -test('with improper cell attributes', function (t) { +test('with improper cell attributes', t => { const tx = '|[en]lang-bad|{color:red;}style-bad|(myclass)class-bad|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      [en]lang-bad{color:red;}style-bad(myclass)class-bad
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +
      [en]lang-bad{color:red;}style-bad(myclass)class-bad
      `, tx); t.end(); }); -test('with line breaks in the cell', function (t) { - const tx = '|a|b\n\ -b|\n\ -|c\n\ -c|d|'; +test('with line breaks in the cell', t => { + const tx = `|a|b +b| +|c +c|d|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      ab
      \n\ -b
      c
      \n\ -c
      d
      ', tx); + ` +\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t +
      ab
      +b
      c
      +c
      d
      `, tx); t.end(); }); -test('with missing cells', function (t) { - const tx = '|a|b|\n\ -|a|\n\ -|a|b|'; +test('with missing cells', t => { + const tx = `|a|b| +|a| +|a|b|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      ab
      a
      ab
      ', tx); + ` +\t +\t\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t\t +\t +
      ab
      a
      ab
      `, tx); t.end(); }); -test('with empty cells', function (t) { - const tx = '||b|\n\ -|a||\n\ -|a| |'; +test('with empty cells', t => { + const tx = `||b| +|a|| +|a| |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      b
      a
      a
      ', tx); + ` +\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t +
      b
      a
      a
      `, tx); t.end(); }); diff --git a/test/tables-extended.js b/test/tables-extended.js index fcc5a4a..2f00d17 100644 --- a/test/tables-extended.js +++ b/test/tables-extended.js @@ -1,545 +1,547 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // extened table syntax -test('headers and cells', function (t) { - const tx = '|_. First Header |_. Second Header |\n\ -| Content Cell | Content Cell |'; +test('headers and cells', t => { + const tx = `|_. First Header |_. Second Header | +| Content Cell | Content Cell |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      First Header Second Header
      Content Cell Content Cell
      ', tx); + ` +\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t +
      First Header Second Header
      Content Cell Content Cell
      `, tx); t.end(); }); -test('captions', function (t) { - const tx = '|=. Your caption goes here\n\ -|foo|bar|'; +test('captions', t => { + const tx = `|=. Your caption goes here +|foo|bar|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      Your caption goes here
      foobar
      ', tx); + ` +\t +\t +\t\t +\t\t\t +\t\t\t +\t\t +\t +
      Your caption goes here
      foobar
      `, tx); t.end(); }); -test('tailing pipes should be stripped from captions', function (t) { - const tx = '|=. caption |\n\ -| foo |\n\n\ -|=. caption\n\ -| foo |'; +test('tailing pipes should be stripped from captions', t => { + const tx = `|=. caption | +| foo | + +|=. caption +| foo |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      caption
      foo
      \n\ -\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      caption
      foo
      ', tx); + ` +\t +\t +\t\t +\t\t\t +\t\t +\t +
      caption
      foo
      + +\t +\t +\t\t +\t\t\t +\t\t +\t +
      caption
      foo
      `, tx); t.end(); }); -test('table summary', function (t) { - const tx = 'table(myTable). This is a journey into sound. Stereophonic sound.\n\ -| foo |'; +test('table summary', t => { + const tx = `table(myTable). This is a journey into sound. Stereophonic sound. +| foo |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -
      foo
      ', tx); + ` +\t +\t\t +\t +
      foo
      `, tx); t.end(); }); -test('tbody/thead/tfoot', function (t) { - const tx = '|^.\n\ -|in head|\n\ -|~.\n\ -|in foot|\n\ -|-.\n\ -|in body|'; +test('tbody/thead/tfoot', t => { + const tx = `|^. +|in head| +|~. +|in foot| +|-. +|in body|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      in head
      in foot
      in body
      ', tx); + ` +\t +\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\t +\t\t +\t +
      in head
      in foot
      in body
      `, tx); t.end(); }); -test('colgroup', function (t) { - const tx = '|:. 100|\n\ -|cell|'; +test('colgroup', t => { + const tx = `|:. 100| +|cell|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      cell
      ', tx); + ` +\t+\t +\t +\t\t +\t\t\t +\t\t +\t +
      cell
      `, tx); t.end(); }); -test('colgroup span size', function (t) { - const tx = '|:\\3. 100|\n\ -|cell|'; +test('colgroup span size', t => { + const tx = `|:\\3. 100| +|cell|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      cell
      ', tx); + ` +\t+\t +\t +\t\t +\t\t\t +\t\t +\t +
      cell
      `, tx); t.end(); }); -test('can target individual cols', function (t) { - const tx = '|:. |\\2. |\\3. 50|\n\ -|cell|cell|'; +test('can target individual cols', t => { + const tx = `|:. |\\2. |\\3. 50| +|cell|cell|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      cellcell
      ', tx); + ` +\t+\t\t+\t\t+\t +\t +\t\t +\t\t\t +\t\t\t +\t\t +\t +
      cellcell
      `, tx); t.end(); }); -test('can style colgroup', function (t) { - const tx = '|:\\5(grpclass#grpid). 200 | 100 |||80|\n\ -|cell|cell|'; +test('can style colgroup', t => { + const tx = `|:\\5(grpclass#grpid). 200 | 100 |||80| +|cell|cell|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      cellcell
      ', tx); + ` +\t+\t\t+\t\t+\t\t+\t\t+\t +\t +\t\t +\t\t\t +\t\t\t +\t\t +\t +
      cellcell
      `, tx); t.end(); }); -test('extened table syntax:10', function (t) { - const tx = '|^.\n\ -|_. First Header |_. Second Header |\n\ -|-.\n\ -| Content Cell | Content Cell |\n\ -| Content Cell | Content Cell |'; +test('extened table syntax:10', t => { + const tx = `|^. +|_. First Header |_. Second Header | +|-. +| Content Cell | Content Cell | +| Content Cell | Content Cell |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      First Header Second Header
      Content Cell Content Cell
      Content Cell Content Cell
      ', tx); + ` +\t +\t\t +\t\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t +\t +
      First Header Second Header
      Content Cell Content Cell
      Content Cell Content Cell
      `, tx); t.end(); }); -test('extened table syntax:11', function (t) { - const tx = '|~.\n\ -|\\2=. A footer, centered & across two columns |\n\ -|-.\n\ -| Content Cell | Content Cell |\n\ -| Content Cell | Content Cell |\n\ -'; +test('extened table syntax:11', t => { + const tx = `|~. +|\\2=. A footer, centered & across two columns | +|-. +| Content Cell | Content Cell | +| Content Cell | Content Cell | +`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      A footer, centered & across two columns
      Content Cell Content Cell
      Content Cell Content Cell
      ', tx); + ` +\t +\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t +\t +
      A footer, centered & across two columns
      Content Cell Content Cell
      Content Cell Content Cell
      `, tx); t.end(); }); -test('styleable cells', function (t) { - const tx = '|a|{color:red}. styled|cell|\n\ -'; +test('styleable cells', t => { + const tx = `|a|{color:red}. styled|cell| +`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      astyledcell
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +
      astyledcell
      `, tx); t.end(); }); -test('row class', function (t) { +test('row class', t => { const tx = '(rowclass). |a|classy|row|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      aclassyrow
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +
      aclassyrow
      `, tx); t.end(); }); -test('table class', function (t) { - const tx = 'table(tableclass).\n\ -|a|classy|table|\n\ -|a|classy|table|'; +test('table class', t => { + const tx = `table(tableclass). +|a|classy|table| +|a|classy|table|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      aclassytable
      aclassytable
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
      aclassytable
      aclassytable
      `, tx); t.end(); }); -test('column span', function (t) { - const tx = '|\\2. spans two cols |\n\ -| col 1 | col 2 |'; +test('column span', t => { + const tx = `|\\2. spans two cols | +| col 1 | col 2 |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      spans two cols
      col 1 col 2
      ', tx); + ` +\t +\t\t +\t +\t +\t\t +\t\t +\t +
      spans two cols
      col 1 col 2
      `, tx); t.end(); }); -test('row span', function (t) { - const tx = '|/3. spans 3 rows | row a |\n\ -| row b |\n\ -| row c |'; +test('row span', t => { + const tx = `|/3. spans 3 rows | row a | +| row b | +| row c |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -
      spans 3 rows row a
      row b
      row c
      ', tx); + ` +\t +\t\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +
      spans 3 rows row a
      row b
      row c
      `, tx); t.end(); }); -test('cell text v-alignment', function (t) { - const tx = '|^. top alignment|\n\ -|-. middle alignment|\n\ -|~. bottom alignment|'; +test('cell text v-alignment', t => { + const tx = `|^. top alignment| +|-. middle alignment| +|~. bottom alignment|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -
      top alignment
      middle alignment
      bottom alignment
      ', tx); + ` +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +
      top alignment
      middle alignment
      bottom alignment
      `, tx); t.end(); }); -test('cell text h-alignment', function (t) { - const tx = '|:\\1. |400|\n\ -|=. center alignment |\n\ -| no alignment |\n\ -|>. right alignment |'; +test('cell text h-alignment', t => { + const tx = `|:\\1. |400| +|=. center alignment | +| no alignment | +|>. right alignment |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      center alignment
      no alignment
      right alignment
      ', tx); + ` +\t+\t\t+\t +\t +\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t +\t +
      center alignment
      no alignment
      right alignment
      `, tx); t.end(); }); -test('a complex table example', function (t) { - const tx = 'p=. Full table with summary, caption, colgroups, thead, tfoot, 2x tbody\n\n\ -table(#dvds){border-collapse:collapse}. Great films on DVD employing Textile summary, caption, thead, tfoot, two tbody elements and colgroups\n\ -|={font-size:140%;margin-bottom:15px}. DVDs with two Textiled tbody elements\n\ -|:\\3. 100 |{background:#ddd}|250||50|300|\n\ -|^(header).\n\ -|_. Title |_. Starring |_. Director |_. Writer |_. Notes |\n\ -|~(footer).\n\ -|\\5=. This is the tfoot, centred |\n\ -|-(toplist){background:#c5f7f6}.\n\ -| _The Usual Suspects_ | Benicio Del Toro, Gabriel Byrne, Stephen Baldwin, Kevin Spacey | Bryan Singer | Chris McQuarrie | One of the finest films ever made |\n\ -| _Se7en_ | Morgan Freeman, Brad Pitt, Kevin Spacey | David Fincher | Andrew Kevin Walker | Great psychological thriller |\n\ -| _Primer_ | David Sullivan, Shane Carruth | Shane Carruth | Shane Carruth | Amazing insight into trust and human psychology through science fiction. Terrific! |\n\ -| _District 9_ | Sharlto Copley, Jason Cope | Neill Blomkamp | Neill Blomkamp, Terri Tatchell | Social commentary layered on thick, but boy is it done well |\n\ -|-(medlist){background:#e7e895;}.\n\ -| _Arlington Road_ | Tim Robbins, Jeff Bridges | Mark Pellington | Ehren Kruger | Awesome study in neighbourly relations |\n\ -| _Phone Booth_ | Colin Farrell, Kiefer Sutherland, Forest Whitaker | Joel Schumacher | Larry Cohen | Edge-of-the-seat stuff in this short but brilliantly executed thriller |'; +test('a complex table example', t => { + const tx = `p=. Full table with summary, caption, colgroups, thead, tfoot, 2x tbody + +table(#dvds){border-collapse:collapse}. Great films on DVD employing Textile summary, caption, thead, tfoot, two tbody elements and colgroups +|={font-size:140%;margin-bottom:15px}. DVDs with two Textiled tbody elements +|:\\3. 100 |{background:#ddd}|250||50|300| +|^(header). +|_. Title |_. Starring |_. Director |_. Writer |_. Notes | +|~(footer). +|\\5=. This is the tfoot, centred | +|-(toplist){background:#c5f7f6}. +| _The Usual Suspects_ | Benicio Del Toro, Gabriel Byrne, Stephen Baldwin, Kevin Spacey | Bryan Singer | Chris McQuarrie | One of the finest films ever made | +| _Se7en_ | Morgan Freeman, Brad Pitt, Kevin Spacey | David Fincher | Andrew Kevin Walker | Great psychological thriller | +| _Primer_ | David Sullivan, Shane Carruth | Shane Carruth | Shane Carruth | Amazing insight into trust and human psychology through science fiction. Terrific! | +| _District 9_ | Sharlto Copley, Jason Cope | Neill Blomkamp | Neill Blomkamp, Terri Tatchell | Social commentary layered on thick, but boy is it done well | +|-(medlist){background:#e7e895;}. +| _Arlington Road_ | Tim Robbins, Jeff Bridges | Mark Pellington | Ehren Kruger | Awesome study in neighbourly relations | +| _Phone Booth_ | Colin Farrell, Kiefer Sutherland, Forest Whitaker | Joel Schumacher | Larry Cohen | Edge-of-the-seat stuff in this short but brilliantly executed thriller |`; t.is(textile.convert(tx), - '

      Full table with summary, caption, colgroups, thead, tfoot, 2x tbody

      \n\ -\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      DVDs with two Textiled tbody elements
      Title Starring Director Writer Notes
      This is the tfoot, centred
      The Usual Suspects Benicio Del Toro, Gabriel Byrne, Stephen Baldwin, Kevin Spacey Bryan Singer Chris McQuarrie One of the finest films ever made
      Se7en Morgan Freeman, Brad Pitt, Kevin Spacey David Fincher Andrew Kevin Walker Great psychological thriller
      Primer David Sullivan, Shane Carruth Shane Carruth Shane Carruth Amazing insight into trust and human psychology through science fiction. Terrific!
      District 9 Sharlto Copley, Jason Cope Neill Blomkamp Neill Blomkamp, Terri Tatchell Social commentary layered on thick, but boy is it done well
      Arlington Road Tim Robbins, Jeff Bridges Mark Pellington Ehren Kruger Awesome study in neighbourly relations
      Phone Booth Colin Farrell, Kiefer Sutherland, Forest Whitaker Joel Schumacher Larry Cohen Edge-of-the-seat stuff in this short but brilliantly executed thriller
      ', tx); + `

      Full table with summary, caption, colgroups, thead, tfoot, 2x tbody

      + +\t +\t+\t\t+\t\t+\t\t+\t\t+\t\t+\t +\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t\t +\t\t +\t +
      DVDs with two Textiled tbody elements
      Title Starring Director Writer Notes
      This is the tfoot, centred
      The Usual Suspects Benicio Del Toro, Gabriel Byrne, Stephen Baldwin, Kevin Spacey Bryan Singer Chris McQuarrie One of the finest films ever made
      Se7en Morgan Freeman, Brad Pitt, Kevin Spacey David Fincher Andrew Kevin Walker Great psychological thriller
      Primer David Sullivan, Shane Carruth Shane Carruth Shane Carruth Amazing insight into trust and human psychology through science fiction. Terrific!
      District 9 Sharlto Copley, Jason Cope Neill Blomkamp Neill Blomkamp, Terri Tatchell Social commentary layered on thick, but boy is it done well
      Arlington Road Tim Robbins, Jeff Bridges Mark Pellington Ehren Kruger Awesome study in neighbourly relations
      Phone Booth Colin Farrell, Kiefer Sutherland, Forest Whitaker Joel Schumacher Larry Cohen Edge-of-the-seat stuff in this short but brilliantly executed thriller
      `, tx); t.end(); }); -test('attr can be passed to all the containers', function (t) { - const tx = 'table(tabl).\n\ -|=(cap#id1). caption\n\ -|:(colgr#id2). |\n\ -|^(head#id3).\n\ -|_. h1 |_. h2 |\n\ -|-(body#id4).\n\ -| a | b |\n\ -|~(foot#id5).\n\ -| c | d |'; +test('attr can be passed to all the containers', t => { + const tx = `table(tabl). +|=(cap#id1). caption +|:(colgr#id2). | +|^(head#id3). +|_. h1 |_. h2 | +|-(body#id4). +| a | b | +|~(foot#id5). +| c | d |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      caption
      h1 h2
      a b
      c d
      ', tx); + ` +\t +\t+\t +\t +\t\t +\t\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\t +\t\t\t +\t\t +\t +\t +\t\t +\t\t\t +\t\t\t +\t\t +\t +
      caption
      h1 h2
      a b
      c d
      `, tx); t.end(); }); -test('classes on cols', function (t) { - const tx = 'table(tabl).\n\ -|:(colgr#id2). |\\2(class#id) 20 |\n\ -| a | b |'; +test('classes on cols', t => { + const tx = `table(tabl). +|:(colgr#id2). |\\2(class#id) 20 | +| a | b |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\t\n\ -\t\t\t\n\ -\t\t\n\ -\t\n\ -
      a b
      ', tx); + ` +\t+\t\t+\t +\t +\t\t +\t\t\t +\t\t\t +\t\t +\t +
      a b
      `, tx); t.end(); }); diff --git a/test/textism.js b/test/textism.js index a714347..23f9ccb 100644 --- a/test/textism.js +++ b/test/textism.js @@ -1,8 +1,8 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // textism.yml -test('header one', function (t) { +test('header one', t => { const tx = 'h1. Header 1'; t.is(textile.convert(tx), '

      Header 1

      ', tx); @@ -11,7 +11,7 @@ test('header one', function (t) { -test('header two', function (t) { +test('header two', t => { const tx = 'h2. Header 2'; t.is(textile.convert(tx), '

      Header 2

      ', tx); @@ -20,7 +20,7 @@ test('header two', function (t) { -test('header three', function (t) { +test('header three', t => { const tx = 'h3. Header 3'; t.is(textile.convert(tx), '

      Header 3

      ', tx); @@ -29,7 +29,7 @@ test('header three', function (t) { -test('header four', function (t) { +test('header four', t => { const tx = 'h4. Header 4'; t.is(textile.convert(tx), '

      Header 4

      ', tx); @@ -38,7 +38,7 @@ test('header four', function (t) { -test('header five', function (t) { +test('header five', t => { const tx = 'h5. Header 5'; t.is(textile.convert(tx), '
      Header 5
      ', tx); @@ -47,7 +47,7 @@ test('header five', function (t) { -test('header six', function (t) { +test('header six', t => { const tx = 'h6. Header 6'; t.is(textile.convert(tx), '
      Header 6
      ', tx); @@ -56,58 +56,60 @@ test('header six', function (t) { -test('blockquote', function (t) { - const tx = 'Any old text.\n\n\ -bq. A block quotation.\n\n\ -Any old text.\n\ -'; +test('blockquote', t => { + const tx = `Any old text. + +bq. A block quotation. + +Any old text. +`; t.is(textile.convert(tx), - '

      Any old text.

      \n\ -
      \n\ -

      A block quotation.

      \n\ -
      \n\ -

      Any old text.

      ', tx); + `

      Any old text.

      +
      +

      A block quotation.

      +
      +

      Any old text.

      `, tx); t.end(); }); -test('textism:8', function (t) { - const tx = '# A first item\n\ -# A second item\n\ -# A third item\n\ -# A fourth item'; +test('textism:8', t => { + const tx = `# A first item +# A second item +# A third item +# A fourth item`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. A first item
      2. \n\ -\t
      3. A second item
      4. \n\ -\t
      5. A third item
      6. \n\ -\t
      7. A fourth item
      8. \n\ -
      ', tx); + `
        +\t
      1. A first item
      2. +\t
      3. A second item
      4. +\t
      5. A third item
      6. +\t
      7. A fourth item
      8. +
      `, tx); t.end(); }); -test('textism:9', function (t) { - const tx = '* A first item\n\ -* A second item\n\ -* A third item\n\ -* A fourth item\n\ -'; +test('textism:9', t => { + const tx = `* A first item +* A second item +* A third item +* A fourth item +`; t.is(textile.convert(tx), - '
        \n\ -\t
      • A first item
      • \n\ -\t
      • A second item
      • \n\ -\t
      • A third item
      • \n\ -\t
      • A fourth item
      • \n\ -
      ', tx); + `
        +\t
      • A first item
      • +\t
      • A second item
      • +\t
      • A third item
      • +\t
      • A fourth item
      • +
      `, tx); t.end(); }); -test('textism:10', function (t) { +test('textism:10', t => { const tx = '_a phrase_'; t.is(textile.convert(tx), '

      a phrase

      ', tx); @@ -116,7 +118,7 @@ test('textism:10', function (t) { -test('textism:11', function (t) { +test('textism:11', t => { const tx = '__a phrase__'; t.is(textile.convert(tx), '

      a phrase

      ', tx); @@ -125,7 +127,7 @@ test('textism:11', function (t) { -test('textism:12', function (t) { +test('textism:12', t => { const tx = '*a phrase*'; t.is(textile.convert(tx), '

      a phrase

      ', tx); @@ -134,7 +136,7 @@ test('textism:12', function (t) { -test('textism:13', function (t) { +test('textism:13', t => { const tx = '**a phrase**'; t.is(textile.convert(tx), '

      a phrase

      ', tx); @@ -143,7 +145,7 @@ test('textism:13', function (t) { -test('textism:14', function (t) { +test('textism:14', t => { const tx = "Nabokov's ??Pnin??"; t.is(textile.convert(tx), '

      Nabokov’s Pnin

      ', tx); @@ -152,7 +154,7 @@ test('textism:14', function (t) { -test('del part of word', function (t) { +test('del part of word', t => { const tx = 'A very [-extra-]ordinary day.'; t.is(textile.convert(tx), '

      A very extraordinary day.

      ', tx); @@ -161,7 +163,7 @@ test('del part of word', function (t) { -test('del part of word that contains a hyphen', function (t) { +test('del part of word that contains a hyphen', t => { const tx = 'An [-extra-extra-]ordinary day.'; t.is(textile.convert(tx), '

      An extra-extraordinary day.

      ', tx); @@ -170,7 +172,7 @@ test('del part of word that contains a hyphen', function (t) { -test('del a phrase', function (t) { +test('del a phrase', t => { const tx = 'Delete -a phrase- this way.'; t.is(textile.convert(tx), '

      Delete a phrase this way.

      ', tx); @@ -179,7 +181,7 @@ test('del a phrase', function (t) { -test('del a phrase that contains hyphens', function (t) { +test('del a phrase that contains hyphens', t => { const tx = 'Delete -a no-nonsense phrase- this way.'; t.is(textile.convert(tx), '

      Delete a no-nonsense phrase this way.

      ', tx); @@ -188,7 +190,7 @@ test('del a phrase that contains hyphens', function (t) { -test('textism:19', function (t) { +test('textism:19', t => { const tx = '+a phrase+'; t.is(textile.convert(tx), '

      a phrase

      ', tx); @@ -197,7 +199,7 @@ test('textism:19', function (t) { -test('textism:20', function (t) { +test('textism:20', t => { const tx = '^a phrase^'; t.is(textile.convert(tx), '

      a phrase

      ', tx); @@ -206,7 +208,7 @@ test('textism:20', function (t) { -test('textism:21', function (t) { +test('textism:21', t => { const tx = '~a phrase~'; t.is(textile.convert(tx), '

      a phrase

      ', tx); @@ -215,7 +217,7 @@ test('textism:21', function (t) { -test('textism:22', function (t) { +test('textism:22', t => { const tx = '%(myclass)SPAN%'; t.is(textile.convert(tx), '

      SPAN

      ', tx); @@ -224,7 +226,7 @@ test('textism:22', function (t) { -test('textism:23', function (t) { +test('textism:23', t => { const tx = '%{color:red}red%'; t.is(textile.convert(tx), '

      red

      ', tx); @@ -233,7 +235,7 @@ test('textism:23', function (t) { -test('textism:24', function (t) { +test('textism:24', t => { const tx = '%[fr]rouge%'; t.is(textile.convert(tx), '

      rouge

      ', tx); @@ -242,7 +244,7 @@ test('textism:24', function (t) { -test('textism:25', function (t) { +test('textism:25', t => { const tx = '_(big)red_'; t.is(textile.convert(tx), '

      red

      ', tx); @@ -251,7 +253,7 @@ test('textism:25', function (t) { -test('textism:26', function (t) { +test('textism:26', t => { const tx = 'p=. A centered paragraph.'; t.is(textile.convert(tx), '

      A centered paragraph.

      ', tx); @@ -260,7 +262,7 @@ test('textism:26', function (t) { -test('textism:27', function (t) { +test('textism:27', t => { const tx = 'p(bob). A paragraph'; t.is(textile.convert(tx), '

      A paragraph

      ', tx); @@ -269,7 +271,7 @@ test('textism:27', function (t) { -test('textism:28', function (t) { +test('textism:28', t => { const tx = 'p{color:#ddd}. A paragraph'; t.is(textile.convert(tx), '

      A paragraph

      ', tx); @@ -278,7 +280,7 @@ test('textism:28', function (t) { -test('textism:29', function (t) { +test('textism:29', t => { const tx = 'p[fr]. A paragraph'; t.is(textile.convert(tx), '

      A paragraph

      ', tx); @@ -287,7 +289,7 @@ test('textism:29', function (t) { -test('textism:30', function (t) { +test('textism:30', t => { const tx = 'h2()>. right-aligned header2, indented 1em both side'; t.is(textile.convert(tx), '

      right-aligned header2, indented 1em both side

      ', tx); @@ -296,7 +298,7 @@ test('textism:30', function (t) { -test('textism:31', function (t) { +test('textism:31', t => { const tx = 'h3=. centered header'; t.is(textile.convert(tx), '

      centered header

      ', tx); @@ -305,7 +307,7 @@ test('textism:31', function (t) { -test('textism:32', function (t) { +test('textism:32', t => { const tx = '!>/image.gif! right-aligned image'; t.is(textile.convert(tx), '

      right-aligned image

      ', tx); @@ -314,7 +316,7 @@ test('textism:32', function (t) { -test('textism:33', function (t) { +test('textism:33', t => { const tx = 'p[no]{color:red}. A Norse of a different colour.'; t.is(textile.convert(tx), '

      A Norse of a different colour.

      ', tx); @@ -323,143 +325,150 @@ test('textism:33', function (t) { -test('textism:34', function (t) { - const tx = '|This|is|a|simple|table|\n\ -|This|is|a|simple|row|'; +test('textism:34', t => { + const tx = `|This|is|a|simple|table| +|This|is|a|simple|row|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      Thisisasimpletable
      Thisisasimplerow
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t\t +\t +
      Thisisasimpletable
      Thisisasimplerow
      `, tx); t.end(); }); -test('textism:35', function (t) { - const tx = 'table{border:1px solid black}.\n\ -|This|is|a|row|\n\ -|This|is|a|row|'; +test('textism:35', t => { + const tx = `table{border:1px solid black}. +|This|is|a|row| +|This|is|a|row|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      Thisisarow
      Thisisarow
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t\t +\t +
      Thisisarow
      Thisisarow
      `, tx); t.end(); }); -test('textism:36', function (t) { +test('textism:36', t => { const tx = '{background:#ddd}. |This|is|a|row|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      Thisisarow
      ', tx); - t.end(); -}); - - - -test('textism:37', function (t) { - const tx = '|{background:#ddd}. Cell with gray background|\n\ -|\\2. Cell spanning 2 columns|\n\ -|/3. Cell spanning 3 rows|\n\ -|>. Right-aligned cell|'; - t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -
      Cell with gray background
      Cell spanning 2 columns
      Cell spanning 3 rows
      Right-aligned cell
      ', tx); - t.end(); -}); - - - -test('basics', function (t) { - const tx = "h2{color:green}. This is a title\n\n\ -h3. This is a subhead\n\n\ -p{color:red}. This is some text of dubious character. Isn't the use of \"quotes\" just lazy writing -- and theft of 'intellectual property' besides? I think the time has come to see a block quote.\n\n\ -bq[fr]. This is a block quote. I'll admit it's not the most exciting block quote ever devised.\n\n\ -Simple list:\n\n\ -# one\n\ -# two\n\ -# three\n\n\ -Multi-level list:\n\n\ -# one\n\ -## aye\n\ -## bee\n\ -## see\n\ -# two\n\ -## x\n\ -## y\n\ -# three\n\ -"; - t.is(textile.convert(tx), - '

      This is a title

      \n\ -

      This is a subhead

      \n\ -

      This is some text of dubious character. Isn’t the use of “quotes” just lazy writing — and theft of ‘intellectual property’ besides? I think the time has come to see a block quote.

      \n\ -
      \n\ -

      This is a block quote. I’ll admit it’s not the most exciting block quote ever devised.

      \n\ -
      \n\ -

      Simple list:

      \n\ -
        \n\ -\t
      1. one
      2. \n\ -\t
      3. two
      4. \n\ -\t
      5. three
      6. \n\ -
      \n\ -

      Multi-level list:

      \n\ -
        \n\ -\t
      1. one\n\ -\t
          \n\ -\t\t
        1. aye
        2. \n\ -\t\t
        3. bee
        4. \n\ -\t\t
        5. see
        6. \n\ -\t
      2. \n\ -\t
      3. two\n\ -\t
          \n\ -\t\t
        1. x
        2. \n\ -\t\t
        3. y
        4. \n\ -\t
      4. \n\ -\t
      5. three
      6. \n\ -
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t\t +\t +
      Thisisarow
      `, tx); + t.end(); +}); + + + +test('textism:37', t => { + const tx = `|{background:#ddd}. Cell with gray background| +|\\2. Cell spanning 2 columns| +|/3. Cell spanning 3 rows| +|>. Right-aligned cell|`; + t.is(textile.convert(tx), + ` +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +
      Cell with gray background
      Cell spanning 2 columns
      Cell spanning 3 rows
      Right-aligned cell
      `, tx); + t.end(); +}); + + + +test('basics', t => { + const tx = `h2{color:green}. This is a title + +h3. This is a subhead + +p{color:red}. This is some text of dubious character. Isn't the use of "quotes" just lazy writing -- and theft of 'intellectual property' besides? I think the time has come to see a block quote. + +bq[fr]. This is a block quote. I'll admit it's not the most exciting block quote ever devised. + +Simple list: + +# one +# two +# three + +Multi-level list: + +# one +## aye +## bee +## see +# two +## x +## y +# three +`; + t.is(textile.convert(tx), + `

      This is a title

      +

      This is a subhead

      +

      This is some text of dubious character. Isn’t the use of “quotes” just lazy writing — and theft of ‘intellectual property’ besides? I think the time has come to see a block quote.

      +
      +

      This is a block quote. I’ll admit it’s not the most exciting block quote ever devised.

      +
      +

      Simple list:

      +
        +\t
      1. one
      2. +\t
      3. two
      4. +\t
      5. three
      6. +
      +

      Multi-level list:

      +
        +\t
      1. one +\t
          +\t\t
        1. aye
        2. +\t\t
        3. bee
        4. +\t\t
        5. see
        6. +\t
      2. +\t
      3. two +\t
          +\t\t
        1. x
        2. +\t\t
        3. y
        4. +\t
      4. +\t
      5. three
      6. +
      `, tx); t.end(); }); diff --git a/test/threshold.js b/test/threshold.js index 1b20df8..0c2f3a8 100644 --- a/test/threshold.js +++ b/test/threshold.js @@ -1,28 +1,29 @@ -const test = require('tape'); -const textile = require('../src'); +import test from 'tape'; +import textile from '../src/index.js'; // threshold.yml -test('paragraph', function (t) { - const tx = 'A paragraph.\n\n\ -Another paragraph.'; +test('paragraph', t => { + const tx = `A paragraph. + +Another paragraph.`; t.is(textile.convert(tx), - '

      A paragraph.

      \n\ -

      Another paragraph.

      ', tx); + `

      A paragraph.

      +

      Another paragraph.

      `, tx); t.end(); }); -test('line breaks', function (t) { - const tx = 'A paragraph with\n\ -a line break.'; +test('line breaks', t => { + const tx = `A paragraph with +a line break.`; t.is(textile.convert(tx), - '

      A paragraph with
      \n\ -a line break.

      ', tx); + `

      A paragraph with
      +a line break.

      `, tx); t.end(); }); -test('xhtml tags', function (t) { +test('xhtml tags', t => { const tx = "Here's some bold text."; t.is(textile.convert(tx), '

      Here’s some bold text.

      ', tx); @@ -30,7 +31,7 @@ test('xhtml tags', function (t) { }); -test('no paragraph tags', function (t) { +test('no paragraph tags', t => { const tx = ' No paragraph tags here.'; t.is(textile.convert(tx), 'No paragraph tags here.', tx); @@ -38,7 +39,7 @@ test('no paragraph tags', function (t) { }); -test('smart quotes', function (t) { +test('smart quotes', t => { const tx = '"Proceed!" said he to the host.'; t.is(textile.convert(tx), '

      “Proceed!” said he to the host.

      ', tx); @@ -46,7 +47,7 @@ test('smart quotes', function (t) { }); -test('smart quotes 2', function (t) { +test('smart quotes 2', t => { const tx = "'Proceed!' said he to the host."; t.is(textile.convert(tx), '

      ‘Proceed!’ said he to the host.

      ', tx); @@ -54,7 +55,7 @@ test('smart quotes 2', function (t) { }); -test('nested quotation marks', function (t) { +test('nested quotation marks', t => { const tx = "\"'I swear, captain,' replied I.\""; t.is(textile.convert(tx), '

      “‘I swear, captain,’ replied I.”

      ', tx); @@ -62,7 +63,7 @@ test('nested quotation marks', function (t) { }); -test('nested quotation marks 2', function (t) { +test('nested quotation marks 2', t => { const tx = "'\"I swear, captain,\" replied I.'"; t.is(textile.convert(tx), '

      ‘“I swear, captain,” replied I.’

      ', tx); @@ -70,7 +71,7 @@ test('nested quotation marks 2', function (t) { }); -test('apostrophe glyphs', function (t) { +test('apostrophe glyphs', t => { const tx = "Greengrocers' apostrophe's."; t.is(textile.convert(tx), '

      Greengrocers’ apostrophe’s.

      ', tx); @@ -78,7 +79,7 @@ test('apostrophe glyphs', function (t) { }); -test('em-dash glyphs', function (t) { +test('em-dash glyphs', t => { const tx = 'You know the Italian proverb -- Chi ha compagno ha padrone.'; t.is(textile.convert(tx), '

      You know the Italian proverb — Chi ha compagno ha padrone.

      ', tx); @@ -86,7 +87,7 @@ test('em-dash glyphs', function (t) { }); -test('em-dash glyphs 2', function (t) { +test('em-dash glyphs 2', t => { const tx = 'You know the Italian proverb--Chi ha compagno ha padrone.'; t.is(textile.convert(tx), '

      You know the Italian proverb—Chi ha compagno ha padrone.

      ', tx); @@ -94,7 +95,7 @@ test('em-dash glyphs 2', function (t) { }); -test('en-dash glyphs', function (t) { +test('en-dash glyphs', t => { const tx = 'You know the Italian proverb - Chi ha compagno ha padrone.'; t.is(textile.convert(tx), '

      You know the Italian proverb – Chi ha compagno ha padrone.

      ', tx); @@ -102,7 +103,7 @@ test('en-dash glyphs', function (t) { }); -test('ellipsis character', function (t) { +test('ellipsis character', t => { const tx = 'Meanwhile...'; t.is(textile.convert(tx), '

      Meanwhile…

      ', tx); @@ -110,7 +111,7 @@ test('ellipsis character', function (t) { }); -test('dimension character', function (t) { +test('dimension character', t => { const tx = '1 x 2 x 3 = 6'; t.is(textile.convert(tx), '

      1 × 2 × 3 = 6

      ', tx); @@ -118,7 +119,7 @@ test('dimension character', function (t) { }); -test('dimension character 2', function (t) { +test('dimension character 2', t => { const tx = '1x2x3 = 6'; t.is(textile.convert(tx), '

      1×2×3 = 6

      ', tx); @@ -126,7 +127,7 @@ test('dimension character 2', function (t) { }); -test('trademark register copyright', function (t) { +test('trademark register copyright', t => { const tx = 'Registered(r) Trademark(tm) Copyright (c).'; t.is(textile.convert(tx), '

      Registered® Trademark™ Copyright ©.

      ', tx); @@ -134,7 +135,7 @@ test('trademark register copyright', function (t) { }); -test('acronyms', function (t) { +test('acronyms', t => { const tx = 'ABC(Always Be Closing)'; t.is(textile.convert(tx), '

      ABC

      ', tx); @@ -142,7 +143,7 @@ test('acronyms', function (t) { }); -test('uppercase', function (t) { +test('uppercase', t => { const tx = 'IBM or HAL'; t.is(textile.convert(tx), '

      IBM or HAL

      ', tx); @@ -150,7 +151,7 @@ test('uppercase', function (t) { }); -test('emphasis', function (t) { +test('emphasis', t => { const tx = 'The _underlying_ cause.'; t.is(textile.convert(tx), '

      The underlying cause.

      ', tx); @@ -158,7 +159,7 @@ test('emphasis', function (t) { }); -test('strong text', function (t) { +test('strong text', t => { const tx = 'The *underlying* cause.'; t.is(textile.convert(tx), '

      The underlying cause.

      ', tx); @@ -166,7 +167,7 @@ test('strong text', function (t) { }); -test('italic text', function (t) { +test('italic text', t => { const tx = 'The __underlying__ cause.'; t.is(textile.convert(tx), '

      The underlying cause.

      ', tx); @@ -174,7 +175,7 @@ test('italic text', function (t) { }); -test('bold text', function (t) { +test('bold text', t => { const tx = 'The **underlying** cause.'; t.is(textile.convert(tx), '

      The underlying cause.

      ', tx); @@ -182,7 +183,7 @@ test('bold text', function (t) { }); -test('citation', function (t) { +test('citation', t => { const tx = '??The Count of Monte Cristo??, by Dumas.'; t.is(textile.convert(tx), '

      The Count of Monte Cristo, by Dumas.

      ', tx); @@ -190,7 +191,7 @@ test('citation', function (t) { }); -test('inserted and deleted text', function (t) { +test('inserted and deleted text', t => { const tx = 'Scratch -that-, replace with +this+.'; t.is(textile.convert(tx), '

      Scratch that, replace with this.

      ', tx); @@ -198,7 +199,7 @@ test('inserted and deleted text', function (t) { }); -test('subscript', function (t) { +test('subscript', t => { const tx = 'log ~2~ n'; t.is(textile.convert(tx), '

      log 2 n

      ', tx); @@ -206,7 +207,7 @@ test('subscript', function (t) { }); -test('superscript', function (t) { +test('superscript', t => { const tx = '2 ^x^'; t.is(textile.convert(tx), '

      2 x

      ', tx); @@ -214,7 +215,7 @@ test('superscript', function (t) { }); -test('span tag', function (t) { +test('span tag', t => { const tx = 'The %underlying% cause.'; t.is(textile.convert(tx), '

      The underlying cause.

      ', tx); @@ -222,7 +223,7 @@ test('span tag', function (t) { }); -test('code', function (t) { +test('code', t => { const tx = 'About the @
      @ tag.'; t.is(textile.convert(tx), '

      About the <hr /> tag.

      ', tx); @@ -230,7 +231,7 @@ test('code', function (t) { }); -test('links', function (t) { +test('links', t => { const tx = '"link text":http://example.com/'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -238,7 +239,7 @@ test('links', function (t) { }); -test('local links', function (t) { +test('local links', t => { const tx = '"link text":/example'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -246,7 +247,7 @@ test('local links', function (t) { }); -test('link title', function (t) { +test('link title', t => { const tx = '"link text(with title)":http://example.com/'; t.is(textile.convert(tx), '

      link text

      ', tx); @@ -254,18 +255,19 @@ test('link title', function (t) { }); -test('link alias', function (t) { - const tx = "Here's \"a link\":tstate, and\n\ -\"another link\":tstate to the same site.\n\n\ -[tstate]http://thresholdstate.com/"; +test('link alias', t => { + const tx = `Here's "a link":tstate, and +"another link":tstate to the same site. + +[tstate]http://thresholdstate.com/`; t.is(textile.convert(tx), - '

      Here’s a link, and
      \n\ -another link to the same site.

      ', tx); + `

      Here’s a link, and
      +another link to the same site.

      `, tx); t.end(); }); -test('image', function (t) { +test('image', t => { const tx = '!/img.gif!'; t.is(textile.convert(tx), '

      ', tx); @@ -273,7 +275,7 @@ test('image', function (t) { }); -test('image 2', function (t) { +test('image 2', t => { const tx = '!http://thresholdstate.com/img.gif!'; t.is(textile.convert(tx), '

      ', tx); @@ -281,7 +283,7 @@ test('image 2', function (t) { }); -test('image alt', function (t) { +test('image alt', t => { const tx = '!/img.gif(alt text)!'; t.is(textile.convert(tx), '

      alt text

      ', tx); @@ -289,7 +291,7 @@ test('image alt', function (t) { }); -test('image links', function (t) { +test('image links', t => { const tx = '!/img.gif!:http://textpattern.com/'; t.is(textile.convert(tx), '

      ', tx); @@ -297,7 +299,7 @@ test('image links', function (t) { }); -test('headers', function (t) { +test('headers', t => { const tx = 'h1. Heading 1'; t.is(textile.convert(tx), '

      Heading 1

      ', tx); @@ -305,7 +307,7 @@ test('headers', function (t) { }); -test('headers 2', function (t) { +test('headers 2', t => { const tx = 'h2. Heading 2'; t.is(textile.convert(tx), '

      Heading 2

      ', tx); @@ -313,7 +315,7 @@ test('headers 2', function (t) { }); -test('headers 3', function (t) { +test('headers 3', t => { const tx = 'h6. Heading 6'; t.is(textile.convert(tx), '
      Heading 6
      ', tx); @@ -321,91 +323,94 @@ test('headers 3', function (t) { }); -test('paragraph text', function (t) { - const tx = 'p. A paragraph.\n\ -Continued.\n\n\ -Also a paragraph.'; +test('paragraph text', t => { + const tx = `p. A paragraph. +Continued. + +Also a paragraph.`; t.is(textile.convert(tx), - '

      A paragraph.
      \n\ -Continued.

      \n\ -

      Also a paragraph.

      ', tx); + `

      A paragraph.
      +Continued.

      +

      Also a paragraph.

      `, tx); t.end(); }); -test('block quote', function (t) { - const tx = 'bq. A quotation.\n\ -Continued.\n\n\ -Regular paragraph.'; +test('block quote', t => { + const tx = `bq. A quotation. +Continued. + +Regular paragraph.`; t.is(textile.convert(tx), - '
      \n\ -

      A quotation.
      \n\ -Continued.

      \n\ -
      \n\ -

      Regular paragraph.

      ', tx); + `
      +

      A quotation.
      +Continued.

      +
      +

      Regular paragraph.

      `, tx); t.end(); }); -test('block quote citation', function (t) { +test('block quote citation', t => { const tx = 'bq.:http://thresholdstate.com/ A cited quotation.'; t.is(textile.convert(tx), - '
      \n\ -

      A cited quotation.

      \n\ -
      ', tx); + `
      +

      A cited quotation.

      +
      `, tx); t.end(); }); -test('footnotes', function (t) { - const tx = 'A footnote reference[1].\n\n\ -fn1. The footnote.'; +test('footnotes', t => { + const tx = `A footnote reference[1]. + +fn1. The footnote.`; t.is(textile.convert(tx), - '

      A footnote reference1.

      \n\ -

      1 The footnote.

      ', tx); + `

      A footnote reference1.

      +

      1 The footnote.

      `, tx); t.end(); }); -test('block code', function (t) { - const tx = 'bc. '; +test('block code', t => { + const tx = `bc. `; t.is(textile.convert(tx), - '
      <script>\n\
      -// a Javascript example\n\
      -alert("Hello World");\n\
      -</script>
      ', tx); + `
      <script>
      +// a Javascript example
      +alert("Hello World");
      +</script>
      `, tx); t.end(); }); -test('preformatted text', function (t) { - const tx = 'pre. Pre-formatted\n\ -text'; +test('preformatted text', t => { + const tx = `pre. Pre-formatted +text`; t.is(textile.convert(tx), - '
      Pre-formatted\n\
      -text
      ', tx); + `
      Pre-formatted
      +text
      `, tx); t.end(); }); -test('notextile', function (t) { - const tx = "notextile. \n\ -"; +test('notextile', t => { + const tx = `notextile. +`; t.is(textile.convert(tx), - "\n\ -", tx); + ` +`, tx); t.end(); }); -test('class attribute', function (t) { +test('class attribute', t => { const tx = 'p(myclass). My classy paragraph.'; t.is(textile.convert(tx), '

      My classy paragraph.

      ', tx); @@ -413,7 +418,7 @@ test('class attribute', function (t) { }); -test('id attribute', function (t) { +test('id attribute', t => { const tx = 'p(#myid). My ID paragraph.'; t.is(textile.convert(tx), '

      My ID paragraph.

      ', tx); @@ -421,7 +426,7 @@ test('id attribute', function (t) { }); -test('style attribute', function (t) { +test('style attribute', t => { const tx = 'p{color:red}. Red rum.'; t.is(textile.convert(tx), '

      Red rum.

      ', tx); @@ -429,7 +434,7 @@ test('style attribute', function (t) { }); -test('lang attribute', function (t) { +test('lang attribute', t => { const tx = 'p[fr-fr]. En français.'; t.is(textile.convert(tx), '

      En français.

      ', tx); @@ -437,7 +442,7 @@ test('lang attribute', function (t) { }); -test('phrase modifiers', function (t) { +test('phrase modifiers', t => { const tx = 'A *(myclass)classy* phrase.'; t.is(textile.convert(tx), '

      A classy phrase.

      ', tx); @@ -445,7 +450,7 @@ test('phrase modifiers', function (t) { }); -test('phrase modifiers 2', function (t) { +test('phrase modifiers 2', t => { const tx = 'An _(#myid2)ID_ phrase.'; t.is(textile.convert(tx), '

      An ID phrase.

      ', tx); @@ -453,7 +458,7 @@ test('phrase modifiers 2', function (t) { }); -test('phrase modifiers 3', function (t) { +test('phrase modifiers 3', t => { const tx = 'The %{color:blue}blue% room.'; t.is(textile.convert(tx), '

      The blue room.

      ', tx); @@ -461,7 +466,7 @@ test('phrase modifiers 3', function (t) { }); -test('block and phrase attributes combined', function (t) { +test('block and phrase attributes combined', t => { const tx = 'p(myclass#myid3){color:green}[de-de]. A complex paragraph.'; t.is(textile.convert(tx), '

      A complex paragraph.

      ', tx); @@ -469,7 +474,7 @@ test('block and phrase attributes combined', function (t) { }); -test('block and phrase attributes combined 2', function (t) { +test('block and phrase attributes combined 2', t => { const tx = 'A ??(myclass#myid4){color:green}[de-de]complex?? phrase.'; t.is(textile.convert(tx), '

      A complex phrase.

      ', tx); @@ -477,77 +482,88 @@ test('block and phrase attributes combined 2', function (t) { }); -test('extended blocks', function (t) { - const tx = 'bq.. A quote.\n\n\ -The quote continued.\n\n\ -p. Back to paragraph text.'; +test('extended blocks', t => { + const tx = `bq.. A quote. + +The quote continued. + +p. Back to paragraph text.`; t.is(textile.convert(tx), - '
      \n\ -

      A quote.

      \n\ -

      The quote continued.

      \n\ -
      \n\ -

      Back to paragraph text.

      ', tx); + `
      +

      A quote.

      +

      The quote continued.

      +
      +

      Back to paragraph text.

      `, tx); t.end(); }); -test('extended block code', function (t) { - const tx = 'A PHP code example.\n\n\ -bc.. \n\n\ -p. Following paragraph.'; +test('extended block code', t => { + const tx = `A PHP code example. + +bc.. + +p. Following paragraph.`; t.is(textile.convert(tx), - '

      A PHP code example.

      \n\ -
      <?php\n\
      -function hello() {\n\
      -// display a hello message\n\n\
      -print "Hello, World";\n\
      -}\n\
      -?>
      \n\ -

      Following paragraph.

      ', tx); + `

      A PHP code example.

      +
      <?php
      +function hello() {
      +// display a hello message
      +
      +print "Hello, World";
      +}
      +?>
      +

      Following paragraph.

      `, tx); t.end(); }); -test('extended block attributes', function (t) { - const tx = 'p(myclass).. A classy paragraph.\n\n\ -Another classy paragraph.\n\n\ -p. Not so classy.'; +test('extended block attributes', t => { + const tx = `p(myclass).. A classy paragraph. + +Another classy paragraph. + +p. Not so classy.`; t.is(textile.convert(tx), - '

      A classy paragraph.

      \n\ -

      Another classy paragraph.

      \n\ -

      Not so classy.

      ', tx); + `

      A classy paragraph.

      +

      Another classy paragraph.

      +

      Not so classy.

      `, tx); t.end(); }); -test('extended block quote attributes', function (t) { - const tx = 'bq(myclass).. Quote paragraph 1.\n\n\ -Paragraph 2.'; +test('extended block quote attributes', t => { + const tx = `bq(myclass).. Quote paragraph 1. + +Paragraph 2.`; t.is(textile.convert(tx), - '
      \n\ -

      Quote paragraph 1.

      \n\ -

      Paragraph 2.

      \n\ -
      ', tx); + `
      +

      Quote paragraph 1.

      +

      Paragraph 2.

      +
      `, tx); t.end(); }); -test('extended block code attributes', function (t) { - const tx = 'bc(myclass).. Code block 1.\n\n\ -Code block 2.'; +test('extended block code attributes', t => { + const tx = `bc(myclass).. Code block 1. + +Code block 2.`; t.is(textile.convert(tx), - '
      Code block 1.\n\n\
      -Code block 2.
      ', tx); + `
      Code block 1.
      +
      +Code block 2.
      `, tx); t.end(); }); -test('raw xhtml left in tact', function (t) { +test('raw xhtml left in tact', t => { const tx = 'bold and italic, the hard way.'; t.is(textile.convert(tx), '

      bold and italic, the hard way.

      ', tx); @@ -555,7 +571,7 @@ test('raw xhtml left in tact', function (t) { }); -test('paragraphs entirely raw xhtml', function (t) { +test('paragraphs entirely raw xhtml', t => { const tx = '
      My div
      '; t.is(textile.convert(tx), '
      My div
      ', tx); @@ -563,7 +579,7 @@ test('paragraphs entirely raw xhtml', function (t) { }); -test('paragraphs with inline xhtml', function (t) { +test('paragraphs with inline xhtml', t => { const tx = 'image'; t.is(textile.convert(tx), '

      image

      ', tx); @@ -571,7 +587,7 @@ test('paragraphs with inline xhtml', function (t) { }); -test('paragraphs with inline xhtml 2', function (t) { +test('paragraphs with inline xhtml 2', t => { const tx = "I'll make my own way."; t.is(textile.convert(tx), '

      I’ll make my own way.

      ', tx); @@ -580,7 +596,7 @@ test('paragraphs with inline xhtml 2', function (t) { // BT: this nesting is invalid HTML, but I'm matching the PHP version here -test('paragraphs partly enclosed in xhtml block tags', function (t) { +test('paragraphs partly enclosed in xhtml block tags', t => { const tx = '
      inside
      and outside.'; t.is(textile.convert(tx), '

      inside
      and outside.

      ', tx); @@ -588,77 +604,81 @@ test('paragraphs partly enclosed in xhtml block tags', function (t) { }); -test('complex xhtml blocks', function (t) { - const tx = '
      \n\ - My div\n\ -
      '; +test('complex xhtml blocks', t => { + const tx = `
      + My div +
      `; t.is(textile.convert(tx), - '
      \n\ - My div\n\ -
      ', tx); + `
      + My div +
      `, tx); t.end(); }); -test('complex xhtml blocks 2', function (t) { - const tx = 'notextile..
      \n\n\ -My div\n\n\ -
      '; +test('complex xhtml blocks 2', t => { + const tx = `notextile..
      + +My div + +
      `; t.is(textile.convert(tx), - '
      \n\n\ -My div\n\n\ -
      ', tx); + `
      + +My div + +
      `, tx); t.end(); }); -test('complex xhtml blocks with inline formatting', function (t) { - const tx = '
      \n\ - My *div*\n\ -
      '; +test('complex xhtml blocks with inline formatting', t => { + const tx = `
      + My *div* +
      `; t.is(textile.convert(tx), - '
      \n\ - My div\n\ -
      ', tx); + `
      + My div +
      `, tx); t.end(); }); -test('explicit pre escapement', function (t) { - const tx = '
      \n\
      -A HTML example\n\
      -
      '; +test('explicit pre escapement', t => { + const tx = `
      +A HTML example
      +
      `; t.is(textile.convert(tx), - '
      \n\
      -A HTML <b>example</b>\n\
      -
      ', tx); + `
      +A HTML <b>example</b>
      +
      `, tx); t.end(); }); -test('explicit code escapement', function (t) { - const tx = '\n\ -Another HTML example\n\ -'; +test('explicit code escapement', t => { + const tx = ` +Another HTML example +`; t.is(textile.convert(tx), - '

      \n\ -Another HTML <b>example</b>\n\ -

      ', tx); + `

      +Another HTML <b>example</b> +

      `, tx); t.end(); }); -test('notextile tags', function (t) { - const tx = '\n\ -p. Leave me alone\n\ -'; +test('notextile tags', t => { + const tx = ` +p. Leave me alone +`; t.is(textile.convert(tx), '\np. Leave me alone\n', tx); t.end(); }); -test('left aligned text', function (t) { +test('left aligned text', t => { const tx = 'p<. Left-aligned paragraph.'; t.is(textile.convert(tx), '

      Left-aligned paragraph.

      ', tx); @@ -666,7 +686,7 @@ test('left aligned text', function (t) { }); -test('right aligned text', function (t) { +test('right aligned text', t => { const tx = 'h3>. Right-aligned heading.'; t.is(textile.convert(tx), '

      Right-aligned heading.

      ', tx); @@ -674,7 +694,7 @@ test('right aligned text', function (t) { }); -test('justified text', function (t) { +test('justified text', t => { const tx = 'p<>. Justified paragraph.'; t.is(textile.convert(tx), '

      Justified paragraph.

      ', tx); @@ -682,7 +702,7 @@ test('justified text', function (t) { }); -test('centered text', function (t) { +test('centered text', t => { const tx = 'h3=. Centered heading.'; t.is(textile.convert(tx), '

      Centered heading.

      ', tx); @@ -690,7 +710,7 @@ test('centered text', function (t) { }); -test('padding', function (t) { +test('padding', t => { const tx = 'p(. Left pad 1em.'; t.is(textile.convert(tx), '

      Left pad 1em.

      ', tx); @@ -698,7 +718,7 @@ test('padding', function (t) { }); -test('padding 2', function (t) { +test('padding 2', t => { const tx = 'p)). Right pad 2em.'; t.is(textile.convert(tx), '

      Right pad 2em.

      ', tx); @@ -706,7 +726,7 @@ test('padding 2', function (t) { }); -test('padding 3', function (t) { +test('padding 3', t => { const tx = 'p(). Left and right pad 1em.'; t.is(textile.convert(tx), '

      Left and right pad 1em.

      ', tx); @@ -714,214 +734,214 @@ test('padding 3', function (t) { }); -test('numeric lists', function (t) { - const tx = '# Item one\n\ -# Item two\n\ -# Item three'; +test('numeric lists', t => { + const tx = `# Item one +# Item two +# Item three`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. Item one
      2. \n\ -\t
      3. Item two
      4. \n\ -\t
      5. Item three
      6. \n\ -
      ', tx); + `
        +\t
      1. Item one
      2. +\t
      3. Item two
      4. +\t
      5. Item three
      6. +
      `, tx); t.end(); }); -test('bulleted lists', function (t) { - const tx = '* Item A\n\ -* Item B\n\ -* Item C'; +test('bulleted lists', t => { + const tx = `* Item A +* Item B +* Item C`; t.is(textile.convert(tx), - '
        \n\ -\t
      • Item A
      • \n\ -\t
      • Item B
      • \n\ -\t
      • Item C
      • \n\ -
      ', tx); + `
        +\t
      • Item A
      • +\t
      • Item B
      • +\t
      • Item C
      • +
      `, tx); t.end(); }); -test('nested lists', function (t) { - const tx = '# Item one\n\ -## Item one-A\n\ -## Item one-B\n\ -### Item one-B-a\n\ -# Item two'; +test('nested lists', t => { + const tx = `# Item one +## Item one-A +## Item one-B +### Item one-B-a +# Item two`; t.is(textile.convert(tx), - '
        \n\ -\t
      1. Item one\n\ -\t
          \n\ -\t\t
        1. Item one-A
        2. \n\ -\t\t
        3. Item one-B\n\ -\t\t
            \n\ -\t\t\t
          1. Item one-B-a
          2. \n\ -\t\t
        4. \n\ -\t
      2. \n\ -\t
      3. Item two
      4. \n\ -
      ', tx); + `
        +\t
      1. Item one +\t
          +\t\t
        1. Item one-A
        2. +\t\t
        3. Item one-B +\t\t
            +\t\t\t
          1. Item one-B-a
          2. +\t\t
        4. +\t
      2. +\t
      3. Item two
      4. +
      `, tx); t.end(); }); -test('tables', function (t) { +test('tables', t => { const tx = '|a|simple|table|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      asimpletable
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +
      asimpletable
      `, tx); t.end(); }); -test('table heading cells', function (t) { - const tx = '|_. a|_. table|_. heading|\n\ -|a|table|row|'; +test('table heading cells', t => { + const tx = `|_. a|_. table|_. heading| +|a|table|row|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      atableheading
      atablerow
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
      atableheading
      atablerow
      `, tx); t.end(); }); -test('cell attributes', function (t) { +test('cell attributes', t => { const tx = '|a|{color:red}. styled|cell|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      astyledcell
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +
      astyledcell
      `, tx); t.end(); }); -test('row attributes', function (t) { +test('row attributes', t => { const tx = '(rowclass). |a|classy|row|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      aclassyrow
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +
      aclassyrow
      `, tx); t.end(); }); -test('table attributes', function (t) { - const tx = 'table(tableclass).\n\ -|a|classy|table|\n\ -|a|classy|table|'; +test('table attributes', t => { + const tx = `table(tableclass). +|a|classy|table| +|a|classy|table|`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      aclassytable
      aclassytable
      ', tx); + ` +\t +\t\t +\t\t +\t\t +\t +\t +\t\t +\t\t +\t\t +\t +
      aclassytable
      aclassytable
      `, tx); t.end(); }); -test('vertical alignment', function (t) { +test('vertical alignment', t => { const tx = '|^. top alignment|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -
      top alignment
      ', tx); + ` +\t +\t\t +\t +
      top alignment
      `, tx); t.end(); }); -test('vertical alignment 2', function (t) { +test('vertical alignment 2', t => { const tx = '|-. middle alignment|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -
      middle alignment
      ', tx); + ` +\t +\t\t +\t +
      middle alignment
      `, tx); t.end(); }); -test('vertical alignment 3', function (t) { +test('vertical alignment 3', t => { const tx = '|~. bottom alignment|'; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -
      bottom alignment
      ', tx); + ` +\t +\t\t +\t +
      bottom alignment
      `, tx); t.end(); }); -test('column span', function (t) { - const tx = '|\\2. spans two cols |\n\ -| col 1 | col 2 |'; +test('column span', t => { + const tx = `|\\2. spans two cols | +| col 1 | col 2 |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -
      spans two cols
      col 1 col 2
      ', tx); + ` +\t +\t\t +\t +\t +\t\t +\t\t +\t +
      spans two cols
      col 1 col 2
      `, tx); t.end(); }); -test('row span', function (t) { - const tx = '|/3. spans 3 rows | row a |\n\ -| row b |\n\ -| row c |'; +test('row span', t => { + const tx = `|/3. spans 3 rows | row a | +| row b | +| row c |`; t.is(textile.convert(tx), - '\n\ -\t\n\ -\t\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -\t\n\ -\t\t\n\ -\t\n\ -
      spans 3 rows row a
      row b
      row c
      ', tx); + ` +\t +\t\t +\t\t +\t +\t +\t\t +\t +\t +\t\t +\t +
      spans 3 rows row a
      row b
      row c
      `, tx); t.end(); }); -test('whitespace required', function (t) { +test('whitespace required', t => { const tx = "this*won't*work"; t.is(textile.convert(tx), '

      this*won’t*work

      ', tx); @@ -929,7 +949,7 @@ test('whitespace required', function (t) { }); -test('modifier without whitespace', function (t) { +test('modifier without whitespace', t => { const tx = 'this[*will*]work'; t.is(textile.convert(tx), '

      thiswillwork

      ', tx); @@ -937,7 +957,7 @@ test('modifier without whitespace', function (t) { }); -test('modifier without whitespace 2', function (t) { +test('modifier without whitespace 2', t => { const tx = '1[^st^], 2[^nd^], 3[^rd^].'; t.is(textile.convert(tx), '

      1st, 2nd, 3rd.

      ', tx); @@ -945,7 +965,7 @@ test('modifier without whitespace 2', function (t) { }); -test('modifier without whitespace 3', function (t) { +test('modifier without whitespace 3', t => { const tx = '2 log[~n~]'; t.is(textile.convert(tx), '

      2 logn

      ', tx); @@ -953,14 +973,14 @@ test('modifier without whitespace 3', function (t) { }); -test('modifier without whitespace 4', function (t) { - const tx = 'A close[!/img.gif!]image.\n\ -A tight["text":http://thresholdstate.com/]link.\n\ -A ["footnoted link":http://thresholdstate.com/][1].'; +test('modifier without whitespace 4', t => { + const tx = `A close[!/img.gif!]image. +A tight["text":http://thresholdstate.com/]link. +A ["footnoted link":http://thresholdstate.com/][1].`; t.is(textile.convert(tx), - '

      A closeimage.
      \n\ -A tighttextlink.
      \n\ -A footnoted link1.

      ', tx); + `

      A closeimage.
      +A tighttextlink.
      +A footnoted link1.

      `, tx); t.end(); }); diff --git a/webpack.config.js b/webpack.config.js index 09681b2..2df350d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -23,18 +23,7 @@ module.exports = { test: /\.js$/, exclude: /node_modules/, use: { - loader: 'babel-loader', - options: { - presets: [ [ '@babel/preset-env', { - loose: true, - // useBuiltIns: 'usage', - targets: { - browsers: [ - '>0.25%', 'not op_mini all' - ] - } - } ] ] - } + loader: 'babel-loader' } } ] From 06025312174efd07a0aef5b13e17ef5e121601c3 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sun, 28 Mar 2021 15:29:33 +0000 Subject: [PATCH 05/35] Update all packages and fix lint problems --- .eslintrc | 3 +- package-lock.json | 7162 ++++++++++---------------------------- package.json | 28 +- src/Node.js | 2 +- src/html.js | 3 +- src/index.js | 2 +- src/ribbon.js | 4 +- test/blocks-and-html.js | 2 - test/extra_whitespace.js | 1 - test/filter_pba.js | 1 - test/html.js | 70 +- test/images.js | 2 - test/instiki.js | 14 +- test/jstextile.js | 17 - test/links.js | 79 - test/options.js | 2 + test/poignant.js | 2 - test/table.js | 17 - test/tables-extended.js | 21 - test/textism.js | 38 - 20 files changed, 1838 insertions(+), 5632 deletions(-) diff --git a/.eslintrc b/.eslintrc index ef2fee8..3ba674c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -7,7 +7,8 @@ rules: { 'import/export': 'error', 'import/no-unresolved': 'error', - 'no-use-before-define': 'error' + 'no-use-before-define': 'error', + 'no-multiple-empty-lines': [ 'error', { 'max': 2, 'maxBOF': 0, 'maxEOF': 1 }] }, globals: { require, diff --git a/package-lock.json b/package-lock.json index 9b41642..44ae522 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,12 +5,12 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.12.13" } }, "@babel/compat-data": { @@ -20,147 +20,48 @@ "dev": true }, "@babel/core": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", - "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.13.tgz", + "integrity": "sha512-1xEs9jZAyKIouOoCmpsgk/I26PoKyvzQ2ixdRpRzfbcp1fL+ozw7TUgdDgwonbTovqRaTfRh50IXuw4QrWO0GA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-compilation-targets": "^7.13.13", + "@babel/helper-module-transforms": "^7.13.12", + "@babel/helpers": "^7.13.10", + "@babel/parser": "^7.13.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.13", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "^6.3.0", "source-map": "^0.5.0" }, "dependencies": { - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - } - } - }, - "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - } - } - }, - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } } } }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, "@babel/helper-annotate-as-pure": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", @@ -168,19 +69,6 @@ "dev": true, "requires": { "@babel/types": "^7.12.13" - }, - "dependencies": { - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -191,19 +79,6 @@ "requires": { "@babel/helper-explode-assignable-expression": "^7.12.13", "@babel/types": "^7.12.13" - }, - "dependencies": { - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-compilation-targets": { @@ -226,6 +101,19 @@ } } }, + "@babel/helper-create-class-features-plugin": { + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", + "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13" + } + }, "@babel/helper-create-regexp-features-plugin": { "version": "7.12.17", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", @@ -236,6 +124,30 @@ "regexpu-core": "^4.7.1" } }, + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "@babel/helper-explode-assignable-expression": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", @@ -243,19 +155,26 @@ "dev": true, "requires": { "@babel/types": "^7.13.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" } }, "@babel/helper-hoist-variables": { @@ -266,112 +185,15 @@ "requires": { "@babel/traverse": "^7.13.0", "@babel/types": "^7.13.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" } }, "@babel/helper-module-imports": { @@ -381,19 +203,6 @@ "dev": true, "requires": { "@babel/types": "^7.13.12" - }, - "dependencies": { - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-module-transforms": { @@ -410,148 +219,21 @@ "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.0", "@babel/types": "^7.13.12" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" } }, "@babel/helper-plugin-utils": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, "@babel/helper-remap-async-to-generator": { @@ -563,19 +245,18 @@ "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-wrap-function": "^7.13.0", "@babel/types": "^7.13.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" } }, "@babel/helper-simple-access": { @@ -585,19 +266,6 @@ "dev": true, "requires": { "@babel/types": "^7.13.12" - }, - "dependencies": { - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -607,19 +275,15 @@ "dev": true, "requires": { "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" } }, "@babel/helper-validator-identifier": { @@ -644,112 +308,6 @@ "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.0", "@babel/types": "^7.13.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helpers": { @@ -761,125 +319,36 @@ "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.0", "@babel/types": "^7.13.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.12.11", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, + "@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "dev": true + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + } + }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.13.8", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", @@ -889,14 +358,16 @@ "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-remap-async-to-generator": "^7.13.0", "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-proposal-dynamic-import": { @@ -907,14 +378,16 @@ "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { @@ -925,14 +398,16 @@ "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { @@ -943,14 +418,16 @@ "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { @@ -964,14 +441,6 @@ "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.13.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -982,14 +451,6 @@ "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-proposal-optional-chaining": { @@ -1001,14 +462,16 @@ "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-proposal-unicode-property-regex": { @@ -1019,14 +482,6 @@ "requires": { "@babel/helper-create-regexp-features-plugin": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-syntax-async-generators": { @@ -1038,6 +493,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -1047,6 +511,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -1056,6 +529,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", @@ -1065,6 +547,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -1099,14 +590,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-arrow-functions": { @@ -1116,14 +599,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-async-to-generator": { @@ -1135,14 +610,6 @@ "@babel/helper-module-imports": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-remap-async-to-generator": "^7.13.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-block-scoped-functions": { @@ -1152,14 +619,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-block-scoping": { @@ -1169,14 +628,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-classes": { @@ -1192,148 +643,6 @@ "@babel/helper-replace-supers": "^7.13.0", "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/plugin-transform-computed-properties": { @@ -1343,14 +652,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-destructuring": { @@ -1360,14 +661,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-dotall-regex": { @@ -1378,14 +671,6 @@ "requires": { "@babel/helper-create-regexp-features-plugin": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-duplicate-keys": { @@ -1395,14 +680,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-exponentiation-operator": { @@ -1413,14 +690,6 @@ "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-for-of": { @@ -1430,14 +699,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-function-name": { @@ -1448,82 +709,6 @@ "requires": { "@babel/helper-function-name": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/plugin-transform-literals": { @@ -1533,14 +718,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-member-expression-literals": { @@ -1550,14 +727,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-modules-amd": { @@ -1569,14 +738,6 @@ "@babel/helper-module-transforms": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-modules-commonjs": { @@ -1589,14 +750,6 @@ "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-simple-access": "^7.12.13", "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-modules-systemjs": { @@ -1610,14 +763,6 @@ "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-identifier": "^7.12.11", "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-modules-umd": { @@ -1628,14 +773,6 @@ "requires": { "@babel/helper-module-transforms": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-named-capturing-groups-regex": { @@ -1654,14 +791,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-object-super": { @@ -1672,148 +801,6 @@ "requires": { "@babel/helper-plugin-utils": "^7.12.13", "@babel/helper-replace-supers": "^7.12.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/plugin-transform-parameters": { @@ -1823,14 +810,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-property-literals": { @@ -1840,14 +819,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-regenerator": { @@ -1866,14 +837,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-shorthand-properties": { @@ -1883,14 +846,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-spread": { @@ -1901,14 +856,6 @@ "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-sticky-regex": { @@ -1918,14 +865,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-template-literals": { @@ -1935,14 +874,6 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/plugin-transform-typeof-symbol": { @@ -1952,14 +883,15 @@ "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-unicode-regex": { @@ -1970,102 +902,114 @@ "requires": { "@babel/helper-create-regexp-features-plugin": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - } } }, "@babel/preset-env": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", - "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.8.6", - "@babel/helper-compilation-targets": "^7.8.7", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.6", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.8.3", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.6", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.7", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.7", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.7", - "browserslist": "^4.8.5", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", + "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.12", + "@babel/helper-compilation-targets": "^7.13.10", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.13.8", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-dynamic-import": "^7.13.8", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.13.8", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.13.0", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.13.12", + "babel-plugin-polyfill-corejs2": "^0.1.4", + "babel-plugin-polyfill-corejs3": "^0.1.3", + "babel-plugin-polyfill-regenerator": "^0.1.2", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, "@babel/register": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.8.6.tgz", - "integrity": "sha512-7IDO93fuRsbyml7bAafBQb3RcBGlCpU4hh5wADA2LJEEcYk92WkwFZ0pHyIi2fb5Auoz1714abETdZKCOxN0CQ==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.8.tgz", + "integrity": "sha512-yCVtABcmvQjRsX2elcZFUV5Q5kDDpHdtXKKku22hNDma60lYuhKmtp1ykZ/okRCPLT2bR5S+cA1kvtBdAFlDTQ==", "dev": true, "requires": { "find-cache-dir": "^2.0.0", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "make-dir": "^2.1.0", "pirates": "^4.0.0", "source-map-support": "^0.5.16" @@ -2080,12 +1024,84 @@ "regenerator-runtime": "^0.13.2" } }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.13", + "@babel/types": "^7.13.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", + "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, "@borgar/eslint-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@borgar/eslint-config/-/eslint-config-1.1.0.tgz", - "integrity": "sha512-6ck5RuGizGia5C44SkNB6A0Ymbfogp6F1AgmdJRpzQtPHMizyyz8x79ToVNPr5NDK/yyUvO3yaCauu78vTrC1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@borgar/eslint-config/-/eslint-config-2.1.0.tgz", + "integrity": "sha512-EqQgsGtxPD0oiT8J/uc0ExDiDX8NsAKzhCoZ9OWsLrNjirxiylwBue/ucF3zXZUcHZjpK9wmADL79uqSgo7qEw==", "dev": true }, + "@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", + "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -2147,188 +1163,217 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@types/eslint": { + "version": "7.2.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.7.tgz", + "integrity": "sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.46", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", + "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", + "dev": true + }, "@types/json-schema": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/node": { + "version": "14.14.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", + "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", + "dev": true + }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", "dev": true }, - "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, - "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "@webassemblyjs/ast": "1.11.0", "@xtuc/long": "4.2.2" } }, - "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "@webpack-cli/configtest": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz", + "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==", + "dev": true + }, + "@webpack-cli/info": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz", + "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@xtuc/long": "4.2.2" + "envinfo": "^7.7.3" } }, + "@webpack-cli/serve": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz", + "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==", + "dev": true + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -2342,15 +1387,15 @@ "dev": true }, "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "acorn-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", - "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, "aggregate-error": { @@ -2372,45 +1417,28 @@ } }, "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, - "ansi-escapes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", - "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true }, "ansi-regex": { "version": "5.0.0", @@ -2427,17 +1455,6 @@ "color-convert": "^1.9.0" } }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, "append-transform": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", @@ -2447,12 +1464,6 @@ "default-require-extensions": "^3.0.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", @@ -2468,22 +1479,10 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", "dev": true }, "array-includes": { @@ -2499,12 +1498,6 @@ "is-string": "^1.0.5" } }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, "array.prototype.flat": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", @@ -2516,449 +1509,203 @@ "es-abstract": "^1.18.0-next.1" } }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } + "array-filter": "^1.0.0" } }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", "dev": true, "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" }, "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "inherits": "2.0.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "p-locate": "^4.1.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "semver": "^6.0.0" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "p-limit": "^2.2.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "find-up": "^4.0.0" } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "object.assign": "^4.1.0" } }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "babel-plugin-polyfill-corejs2": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", + "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", "dev": true, "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "@babel/compat-data": "^7.13.0", + "@babel/helper-define-polyfill-provider": "^0.1.5", + "semver": "^6.1.1" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" } }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "babel-plugin-polyfill-regenerator": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", + "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "@babel/helper-define-polyfill-provider": "^0.1.5" } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cacache": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", - "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", - "dev": true, - "requires": { - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^7.0.0", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -3027,74 +1774,6 @@ "supports-color": "^5.3.0" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, "chrome-trace-event": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", @@ -3104,51 +1783,12 @@ "tslib": "^1.9.0" } }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -3158,27 +1798,17 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "color-convert": { @@ -3214,42 +1844,12 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", @@ -3265,26 +1865,6 @@ "safe-buffer": "~5.1.1" } }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "core-js-compat": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz", @@ -3303,95 +1883,17 @@ } } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -3407,24 +1909,59 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", + "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", "dev": true, "requires": { + "call-bind": "^1.0.0", + "es-get-iterator": "^1.1.1", + "get-intrinsic": "^1.0.1", "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", + "is-date-object": "^1.0.2", + "is-regex": "^1.1.1", + "isarray": "^2.0.5", + "object-is": "^1.1.4", "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "deep-is": { @@ -3459,88 +1996,12 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3550,12 +2011,6 @@ "esutils": "^2.0.2" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, "dotignore": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", @@ -3571,100 +2026,57 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, "electron-to-chromium": { "version": "1.3.701", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.701.tgz", "integrity": "sha512-Zd9ofdIMYHYhG1gvnejQDvC/kqSeXQvtXF0yRURGxgwGqDZm9F9Fm3dYFnm5gyuA7xpXfBlzVLN1sz0FjxpKfw==", "dev": true }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", + "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true } } }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { - "prr": "~1.0.1" + "ansi-colors": "^4.1.1" } }, + "envinfo": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", + "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3734,6 +2146,42 @@ } } }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "dev": true + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -3764,69 +2212,177 @@ "dev": true }, "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", + "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", + "levn": "^0.4.1", + "lodash": "^4.17.21", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", + "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "globals": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", - "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz", + "integrity": "sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } @@ -3938,23 +2494,24 @@ } }, "eslint-plugin-import": { - "version": "2.20.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", - "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", "dev": true, "requires": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.1", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", "has": "^1.0.3", "minimatch": "^3.0.4", - "object.values": "^1.1.0", + "object.values": "^1.1.1", "read-pkg-up": "^2.0.0", - "resolve": "^1.12.0" + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { "debug": { @@ -3985,39 +2542,55 @@ } }, "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", "dev": true }, "espree": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", - "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "acorn": "^7.1.0", - "acorn-jsx": "^5.1.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "esprima": { @@ -4027,21 +2600,37 @@ "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "estraverse": { @@ -4068,176 +2657,27 @@ "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", "dev": true }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { @@ -4252,58 +2692,19 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, - "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "flat-cache": "^3.0.4" } }, "find-cache-dir": { @@ -4326,45 +2727,33 @@ "locate-path": "^3.0.0" } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -4374,10 +2763,10 @@ "is-callable": "^1.1.3" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, "foreground-child": { @@ -4388,68 +2777,6 @@ "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" } }, "fromentries": { @@ -4458,57 +2785,12 @@ "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -4558,10 +2840,10 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true }, "glob": { @@ -4579,48 +2861,19 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, "globals": { "version": "11.12.0", @@ -4661,78 +2914,6 @@ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -4749,26 +2930,6 @@ "integrity": "sha512-X+4w5O6JMW7zlgAhad6OPA/MwYTW1FqrF27+6ItRUmDT4jklsXd4N5S5hNCmd9AIGVp8SLsCoGwRe5ddBp/CKg==", "dev": true }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -4781,31 +2942,10 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "ignore": { @@ -4815,187 +2955,107 @@ "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.2.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "restore-cursor": "^3.1.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "mimic-fn": "^2.1.0" + "p-locate": "^4.1.0" } }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "p-limit": "^2.2.0" } }, - "string-width": { + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } + "find-up": "^4.0.0" } } } }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "loose-envify": "^1.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "call-bind": "^1.0.0" } }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5006,17 +3066,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } + "dev": true }, "is-boolean-object": { "version": "1.1.0", @@ -5027,12 +3077,6 @@ "call-bind": "^1.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", @@ -5048,57 +3092,12 @@ "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5106,9 +3105,9 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { @@ -5120,32 +3119,18 @@ "is-extglob": "^2.1.1" } }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-number-object": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", @@ -5161,21 +3146,30 @@ "isobject": "^3.0.1" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, "requires": { - "has": "^1.0.1" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } } }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -5197,24 +3191,51 @@ "has-symbols": "^1.0.0" } }, + "is-typed-array": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", + "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -5283,17 +3304,6 @@ "uuid": "^3.3.3" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -5303,12 +3313,6 @@ "semver": "^6.0.0" } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -5323,30 +3327,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -5423,11 +3403,12 @@ } }, "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { + "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" }, @@ -5456,9 +3437,9 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -5504,29 +3485,14 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, "load-json-file": { @@ -5550,19 +3516,19 @@ } }, "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { "big.js": "^5.2.2", - "emojis-list": "^2.0.0", + "emojis-list": "^3.0.0", "json5": "^1.0.1" }, "dependencies": { @@ -5593,30 +3559,18 @@ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -5627,268 +3581,56 @@ "semver": "^5.6.0" } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + }, + "mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dev": true, + "requires": { + "mime-db": "1.46.0" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "minimist": "^1.2.5" + "brace-expansion": "^1.1.7" } }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, "ms": { @@ -5897,38 +3639,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5941,51 +3651,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", @@ -6019,17 +3684,19 @@ "validate-npm-package-license": "^3.0.1" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "optional": true + "requires": { + "path-key": "^3.0.0" + } }, "nyc": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.0.1.tgz", - "integrity": "sha512-n0MBXYBYRqa67IVt62qW1r/d9UH/Qtr7SF1w/nQLJ9KxvWF6b2xCHImRAixHN9tnMMYHC2P14uo6KddNGwMgGg==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "requires": { "@istanbuljs/load-nyc-config": "^1.0.0", @@ -6040,6 +3707,7 @@ "find-cache-dir": "^3.2.0", "find-up": "^4.1.0", "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", "glob": "^7.1.6", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-hook": "^3.0.0", @@ -6160,43 +3828,6 @@ } } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", @@ -6204,10 +3835,14 @@ "dev": true }, "object-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", - "dev": true + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } }, "object-keys": { "version": "1.1.1", @@ -6215,34 +3850,24 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "isobject": "^3.0.1" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } } }, "object.values": { @@ -6266,31 +3891,28 @@ "wrappy": "1" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "mimic-fn": "^2.1.0" } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } }, "p-limit": { "version": "2.2.1", @@ -6337,23 +3959,6 @@ "release-zalgo": "^1.0.0" } }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6363,19 +3968,6 @@ "callsites": "^3.0.0" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -6391,31 +3983,6 @@ "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true, - "optional": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -6429,9 +3996,9 @@ "dev": true }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { @@ -6457,26 +4024,6 @@ } } }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "optional": true - }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -6501,16 +4048,10 @@ "find-up": "^3.0.0" } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "pretty-ms": { @@ -6522,18 +4063,6 @@ "parse-ms": "^2.0.0" } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, "process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -6549,91 +4078,12 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -6643,16 +4093,6 @@ "safe-buffer": "^5.1.0" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -6719,29 +4159,13 @@ } } }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", "dev": true, - "optional": true, "requires": { - "picomatch": "^2.2.1" + "resolve": "^1.9.0" } }, "regenerate": { @@ -6760,123 +4184,34 @@ } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - } + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, "regexpu-core": { @@ -6925,31 +4260,18 @@ "es6-error": "^4.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true, - "optional": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -6966,26 +4288,20 @@ "path-parse": "^1.0.6" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "resolve-from": "^5.0.0" }, "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true } } }, @@ -6995,12 +4311,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, "resumer": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", @@ -7010,88 +4320,21 @@ "through": "~2.3.4" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, "semver": { @@ -7101,9 +4344,9 @@ "dev": true }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -7115,199 +4358,84 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "kind-of": "^6.0.2" } }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "color-convert": "^2.0.1" } }, - "extend-shallow": { + "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "color-name": "~1.1.4" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true } } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -7320,19 +4448,6 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", @@ -7351,12 +4466,6 @@ } } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", @@ -7394,15 +4503,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -7422,122 +4522,26 @@ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "ssri": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", - "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "minipass": "^3.1.1" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "string-width": { @@ -7549,119 +4553,17 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "string.prototype.trim": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz", - "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz", + "integrity": "sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - } + "es-abstract": "^1.18.0-next.2" } }, "string.prototype.trimend": { @@ -7694,20 +4596,12 @@ } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } + "ansi-regex": "^5.0.0" } }, "strip-bom": { @@ -7716,10 +4610,16 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { @@ -7732,27 +4632,34 @@ } }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" }, "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "ajv": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", + "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true } } }, @@ -7804,32 +4711,34 @@ } }, "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "dev": true }, "tape": { - "version": "4.13.3", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.3.tgz", - "integrity": "sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw==", - "dev": true, - "requires": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/tape/-/tape-5.2.2.tgz", + "integrity": "sha512-grXrzPC1ly2kyTMKdqxh5GiLpb0BpNctCuecTB0psHX4Gu0nc+uxWR4xKjTh/4CfQlH4zhvTM2/EXmHXp6v/uA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "deep-equal": "^2.0.5", + "defined": "^1.0.0", + "dotignore": "^0.1.2", + "for-each": "^0.3.3", + "glob": "^7.1.6", + "has": "^1.0.3", + "inherits": "^2.0.4", + "is-regex": "^1.1.2", + "minimist": "^1.2.5", + "object-inspect": "^1.9.0", + "object-is": "^1.1.5", + "object.assign": "^4.1.2", + "resolve": "^2.0.0-next.3", + "resumer": "^0.0.0", + "string.prototype.trim": "^1.2.4", + "through": "^2.3.8" }, "dependencies": { "glob": { @@ -7846,188 +4755,76 @@ "path-is-absolute": "^1.0.0" } }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "has": "^1.0.3" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "requires": { + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } } } }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", + "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", "dev": true, "requires": { "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" }, "dependencies": { "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, "terser-webpack-plugin": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", - "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", "dev": true, "requires": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.3.1", - "jest-worker": "^25.4.0", - "p-limit": "^2.3.0", - "schema-utils": "^2.6.6", - "serialize-javascript": "^4.0.0", + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^4.6.12", - "webpack-sources": "^1.4.3" + "terser": "^5.5.1" }, "dependencies": { - "ajv": { - "version": "6.12.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", - "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "randombytes": "^2.1.0" + "yocto-queue": "^0.1.0" } }, "source-map": { @@ -8061,107 +4858,48 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "minimist": "^1.2.0" } } } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, "type-fest": { @@ -8170,12 +4908,6 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -8233,83 +4965,6 @@ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -8319,53 +4974,6 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8379,9 +4987,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "validate-npm-package-license": { @@ -8394,423 +5002,189 @@ "spdx-expression-parse": "^3.0.0" } }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", "dev": true, "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" } }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "webpack": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz", + "integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==", "dev": true, - "optional": true, "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - } - } - }, - "webpack": { - "version": "4.41.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz", - "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.46", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", + "enhanced-resolve": "^5.7.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", - "webpack-sources": "^1.4.1" + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" }, "dependencies": { "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", + "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==", "dev": true }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - } - } - }, - "webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" } }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "yocto-queue": "^0.1.0" } }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "terser": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", + "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } } }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "terser-webpack-plugin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.5.1" } }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" } } } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "webpack-cli": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", + "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.0.2", + "@webpack-cli/info": "^1.2.3", + "@webpack-cli/serve": "^1.3.1", + "colorette": "^1.2.1", + "commander": "^7.0.0", + "enquirer": "^2.3.6", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true } } }, + "webpack-merge": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", + "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -8846,27 +5220,59 @@ } } }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -8901,15 +5307,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } } } }, @@ -8919,15 +5316,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -8940,16 +5328,10 @@ "typedarray-to-buffer": "^3.1.5" } }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yallist": { @@ -9031,6 +5413,12 @@ "camelcase": "^5.0.0", "decamelize": "^1.2.0" } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 9740ed3..cfe8f0d 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ "url": "http://github.com/borgar/textile-js/issues" }, "funding": { - "type" : "individual", - "url" : "https://ko-fi.com/borgar" + "type": "individual", + "url": "https://ko-fi.com/borgar" }, "keywords": [ "textile", @@ -37,18 +37,18 @@ ], "license": "MIT", "devDependencies": { - "@babel/core": "~7.8.7", - "@babel/preset-env": "~7.8.7", - "@babel/register": "~7.8.6", - "@borgar/eslint-config": "~1.1.0", - "babel-loader": "~8.0.6", - "eslint": "~6.8.0", - "eslint-plugin-import": "~2.20.2", - "nyc": "~15.0.1", + "@babel/core": "~7.13.13", + "@babel/preset-env": "~7.13.12", + "@babel/register": "~7.13.8", + "@borgar/eslint-config": "~2.1.0", + "babel-loader": "~8.2.2", + "eslint": "~7.23.0", + "eslint-plugin-import": "~2.22.1", + "nyc": "~15.1.0", "tap-min": "~2.0.0", - "tape": "~4.13.3", - "terser-webpack-plugin": "~2.3.6", - "webpack": "~4.41.6", - "webpack-cli": "~3.3.12" + "tape": "~5.2.2", + "terser-webpack-plugin": "~5.1.1", + "webpack": "~5.28.0", + "webpack-cli": "~4.6.0" } } diff --git a/src/Node.js b/src/Node.js index 970d090..5e36451 100644 --- a/src/Node.js +++ b/src/Node.js @@ -79,7 +79,7 @@ export class Node { this.pos.offset = offset; return this; } -}; +} export class TextNode extends Node { constructor (data) { diff --git a/src/html.js b/src/html.js index 9384a17..a979329 100644 --- a/src/html.js +++ b/src/html.js @@ -147,7 +147,8 @@ export function tokenize (src, whitelistTags, lazy, offset) { } // This "indesciminately" parses HTML text into a list of JSON-ML element -// No steps are taken however to prevent things like

      - user can still create nonsensical but "well-formed" markup +// No steps are taken however to prevent things like

      }); - test('with missing cells', t => { const tx = `|a|b| |a| @@ -431,7 +416,6 @@ test('with missing cells', t => { }); - test('with empty cells', t => { const tx = `||b| |a|| @@ -454,4 +438,3 @@ test('with empty cells', t => { t.end(); }); - diff --git a/test/tables-extended.js b/test/tables-extended.js index 2f00d17..22b1b1d 100644 --- a/test/tables-extended.js +++ b/test/tables-extended.js @@ -20,7 +20,6 @@ test('headers and cells', t => { }); - test('captions', t => { const tx = `|=. Your caption goes here |foo|bar|`; @@ -38,7 +37,6 @@ test('captions', t => { }); - test('tailing pipes should be stripped from captions', t => { const tx = `|=. caption | | foo | @@ -66,7 +64,6 @@ test('tailing pipes should be stripped from captions', t => { }); - test('table summary', t => { const tx = `table(myTable). This is a journey into sound. Stereophonic sound. | foo |`; @@ -80,7 +77,6 @@ test('table summary', t => { }); - test('tbody/thead/tfoot', t => { const tx = `|^. |in head| @@ -110,7 +106,6 @@ test('tbody/thead/tfoot', t => { }); - test('colgroup', t => { const tx = `|:. 100| |cell|`; @@ -128,7 +123,6 @@ test('colgroup', t => { }); - test('colgroup span size', t => { const tx = `|:\\3. 100| |cell|`; @@ -146,7 +140,6 @@ test('colgroup span size', t => { }); - test('can target individual cols', t => { const tx = `|:. |\\2. |\\3. 50| |cell|cell|`; @@ -167,7 +160,6 @@ test('can target individual cols', t => { }); - test('can style colgroup', t => { const tx = `|:\\5(grpclass#grpid). 200 | 100 |||80| |cell|cell|`; @@ -190,7 +182,6 @@ test('can style colgroup', t => { }); - test('extened table syntax:10', t => { const tx = `|^. |_. First Header |_. Second Header | @@ -220,7 +211,6 @@ test('extened table syntax:10', t => { }); - test('extened table syntax:11', t => { const tx = `|~. |\\2=. A footer, centered & across two columns | @@ -250,7 +240,6 @@ test('extened table syntax:11', t => { }); - test('styleable cells', t => { const tx = `|a|{color:red}. styled|cell| `; @@ -266,7 +255,6 @@ test('styleable cells', t => { }); - test('row class', t => { const tx = '(rowclass). |a|classy|row|'; t.is(textile.convert(tx), @@ -281,7 +269,6 @@ test('row class', t => { }); - test('table class', t => { const tx = `table(tableclass). |a|classy|table| @@ -303,7 +290,6 @@ test('table class', t => { }); - test('column span', t => { const tx = `|\\2. spans two cols | | col 1 | col 2 |`; @@ -321,7 +307,6 @@ test('column span', t => { }); - test('row span', t => { const tx = `|/3. spans 3 rows | row a | | row b | @@ -343,7 +328,6 @@ test('row span', t => { }); - test('cell text v-alignment', t => { const tx = `|^. top alignment| |-. middle alignment| @@ -364,7 +348,6 @@ test('cell text v-alignment', t => { }); - test('cell text h-alignment', t => { const tx = `|:\\1. |400| |=. center alignment | @@ -391,7 +374,6 @@ test('cell text h-alignment', t => { }); - test('a complex table example', t => { const tx = `p=. Full table with summary, caption, colgroups, thead, tfoot, 2x tbody @@ -486,7 +468,6 @@ table(#dvds){border-collapse:collapse}. Great films on DVD employing Textile sum }); - test('attr can be passed to all the containers', t => { const tx = `table(tabl). |=(cap#id1). caption @@ -525,7 +506,6 @@ test('attr can be passed to all the containers', t => { }); - test('classes on cols', t => { const tx = `table(tabl). |:(colgr#id2). |\\2(class#id) 20 | @@ -545,4 +525,3 @@ test('classes on cols', t => { t.end(); }); - diff --git a/test/textism.js b/test/textism.js index 23f9ccb..a5a3df1 100644 --- a/test/textism.js +++ b/test/textism.js @@ -10,7 +10,6 @@ test('header one', t => { }); - test('header two', t => { const tx = 'h2. Header 2'; t.is(textile.convert(tx), @@ -19,7 +18,6 @@ test('header two', t => { }); - test('header three', t => { const tx = 'h3. Header 3'; t.is(textile.convert(tx), @@ -28,7 +26,6 @@ test('header three', t => { }); - test('header four', t => { const tx = 'h4. Header 4'; t.is(textile.convert(tx), @@ -37,7 +34,6 @@ test('header four', t => { }); - test('header five', t => { const tx = 'h5. Header 5'; t.is(textile.convert(tx), @@ -46,7 +42,6 @@ test('header five', t => { }); - test('header six', t => { const tx = 'h6. Header 6'; t.is(textile.convert(tx), @@ -55,7 +50,6 @@ test('header six', t => { }); - test('blockquote', t => { const tx = `Any old text. @@ -73,7 +67,6 @@ Any old text. }); - test('textism:8', t => { const tx = `# A first item # A second item @@ -90,7 +83,6 @@ test('textism:8', t => { }); - test('textism:9', t => { const tx = `* A first item * A second item @@ -108,7 +100,6 @@ test('textism:9', t => { }); - test('textism:10', t => { const tx = '_a phrase_'; t.is(textile.convert(tx), @@ -117,7 +108,6 @@ test('textism:10', t => { }); - test('textism:11', t => { const tx = '__a phrase__'; t.is(textile.convert(tx), @@ -126,7 +116,6 @@ test('textism:11', t => { }); - test('textism:12', t => { const tx = '*a phrase*'; t.is(textile.convert(tx), @@ -135,7 +124,6 @@ test('textism:12', t => { }); - test('textism:13', t => { const tx = '**a phrase**'; t.is(textile.convert(tx), @@ -144,7 +132,6 @@ test('textism:13', t => { }); - test('textism:14', t => { const tx = "Nabokov's ??Pnin??"; t.is(textile.convert(tx), @@ -153,7 +140,6 @@ test('textism:14', t => { }); - test('del part of word', t => { const tx = 'A very [-extra-]ordinary day.'; t.is(textile.convert(tx), @@ -162,7 +148,6 @@ test('del part of word', t => { }); - test('del part of word that contains a hyphen', t => { const tx = 'An [-extra-extra-]ordinary day.'; t.is(textile.convert(tx), @@ -171,7 +156,6 @@ test('del part of word that contains a hyphen', t => { }); - test('del a phrase', t => { const tx = 'Delete -a phrase- this way.'; t.is(textile.convert(tx), @@ -180,7 +164,6 @@ test('del a phrase', t => { }); - test('del a phrase that contains hyphens', t => { const tx = 'Delete -a no-nonsense phrase- this way.'; t.is(textile.convert(tx), @@ -189,7 +172,6 @@ test('del a phrase that contains hyphens', t => { }); - test('textism:19', t => { const tx = '+a phrase+'; t.is(textile.convert(tx), @@ -198,7 +180,6 @@ test('textism:19', t => { }); - test('textism:20', t => { const tx = '^a phrase^'; t.is(textile.convert(tx), @@ -207,7 +188,6 @@ test('textism:20', t => { }); - test('textism:21', t => { const tx = '~a phrase~'; t.is(textile.convert(tx), @@ -216,7 +196,6 @@ test('textism:21', t => { }); - test('textism:22', t => { const tx = '%(myclass)SPAN%'; t.is(textile.convert(tx), @@ -225,7 +204,6 @@ test('textism:22', t => { }); - test('textism:23', t => { const tx = '%{color:red}red%'; t.is(textile.convert(tx), @@ -234,7 +212,6 @@ test('textism:23', t => { }); - test('textism:24', t => { const tx = '%[fr]rouge%'; t.is(textile.convert(tx), @@ -243,7 +220,6 @@ test('textism:24', t => { }); - test('textism:25', t => { const tx = '_(big)red_'; t.is(textile.convert(tx), @@ -252,7 +228,6 @@ test('textism:25', t => { }); - test('textism:26', t => { const tx = 'p=. A centered paragraph.'; t.is(textile.convert(tx), @@ -261,7 +236,6 @@ test('textism:26', t => { }); - test('textism:27', t => { const tx = 'p(bob). A paragraph'; t.is(textile.convert(tx), @@ -270,7 +244,6 @@ test('textism:27', t => { }); - test('textism:28', t => { const tx = 'p{color:#ddd}. A paragraph'; t.is(textile.convert(tx), @@ -279,7 +252,6 @@ test('textism:28', t => { }); - test('textism:29', t => { const tx = 'p[fr]. A paragraph'; t.is(textile.convert(tx), @@ -288,7 +260,6 @@ test('textism:29', t => { }); - test('textism:30', t => { const tx = 'h2()>. right-aligned header2, indented 1em both side'; t.is(textile.convert(tx), @@ -297,7 +268,6 @@ test('textism:30', t => { }); - test('textism:31', t => { const tx = 'h3=. centered header'; t.is(textile.convert(tx), @@ -306,7 +276,6 @@ test('textism:31', t => { }); - test('textism:32', t => { const tx = '!>/image.gif! right-aligned image'; t.is(textile.convert(tx), @@ -315,7 +284,6 @@ test('textism:32', t => { }); - test('textism:33', t => { const tx = 'p[no]{color:red}. A Norse of a different colour.'; t.is(textile.convert(tx), @@ -324,7 +292,6 @@ test('textism:33', t => { }); - test('textism:34', t => { const tx = `|This|is|a|simple|table| |This|is|a|simple|row|`; @@ -349,7 +316,6 @@ test('textism:34', t => { }); - test('textism:35', t => { const tx = `table{border:1px solid black}. |This|is|a|row| @@ -373,7 +339,6 @@ test('textism:35', t => { }); - test('textism:36', t => { const tx = '{background:#ddd}. |This|is|a|row|'; t.is(textile.convert(tx), @@ -389,7 +354,6 @@ test('textism:36', t => { }); - test('textism:37', t => { const tx = `|{background:#ddd}. Cell with gray background| |\\2. Cell spanning 2 columns| @@ -414,7 +378,6 @@ test('textism:37', t => { }); - test('basics', t => { const tx = `h2{color:green}. This is a title @@ -472,4 +435,3 @@ Multi-level list: t.end(); }); - From 53a12b80b112757f94ef649186eefca2f0642d31 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sun, 28 Mar 2021 15:49:02 +0000 Subject: [PATCH 06/35] Code lint and crud fixes --- package.json | 2 +- src/{Node.js => VDOM.js} | 0 src/html.js | 2 +- src/index.js | 2 +- src/re.js | 17 +++++++++-------- src/ribbon.js | 1 - src/textile/attr.js | 4 +++- src/textile/deflist.js | 2 +- src/textile/flow.js | 4 ++-- src/textile/glyph.js | 2 +- src/textile/list.js | 10 +++------- src/textile/phrase.js | 3 +-- src/textile/table.js | 13 ++++++------- 13 files changed, 29 insertions(+), 33 deletions(-) rename src/{Node.js => VDOM.js} (100%) diff --git a/package.json b/package.json index cfe8f0d..65fbdbc 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "start": "webpack --mode development --watch", "dev": "nodemon -w test -w src -x 'tape -r @babel/register 'test/*.js'|tap-min'", "test": "tape -r @babel/register 'test/*js' | tap-min", - "lint": "eslint src/*js test/*js", + "lint": "eslint src/ test/", "coverage": "nyc --reporter html --reporter text tape -r @babel/register test/*js", "pub": "node scripts/publish.js", "dingus": "node scripts/updatedingus.js" diff --git a/src/Node.js b/src/VDOM.js similarity index 100% rename from src/Node.js rename to src/VDOM.js diff --git a/src/html.js b/src/html.js index a979329..b1f5197 100644 --- a/src/html.js +++ b/src/html.js @@ -1,6 +1,6 @@ import re from './re.js'; import Ribbon from './Ribbon.js'; -import { Element, TextNode, CommentNode } from './Node.js'; +import { Element, TextNode, CommentNode } from './VDOM.js'; import { singletons } from './constants.js'; re.pattern.html_id = '[a-zA-Z][a-zA-Z\\d:]*'; diff --git a/src/index.js b/src/index.js index 0e10034..948db61 100644 --- a/src/index.js +++ b/src/index.js @@ -7,7 +7,7 @@ import { parseFlow } from './textile/flow.js'; export { parseHtml } from './html.js'; -import { Document, Element, RawNode, TextNode, CommentNode } from './Node.js'; +import { Document, Element, RawNode, TextNode, CommentNode } from './VDOM.js'; function parseTextile (tx, opt) { const root = new Document(); diff --git a/src/re.js b/src/re.js index d38f3c9..5693c54 100644 --- a/src/re.js +++ b/src/re.js @@ -7,6 +7,7 @@ */ const _cache = {}; +const toString = Object.prototype.toString; const re = { @@ -15,18 +16,19 @@ const re = { space: '\\s' }, - escape: function (src) { - return src.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + escape: src => { + return src + .replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); }, - collapse: function (src) { + collapse: src => { return src.replace(/(?:#.*?(?:\n|$))/g, '') .replace(/\s+/g, ''); }, - expandPatterns: function (src) { + expandPatterns: src => { // TODO: provide escape for patterns: \[:pattern:] ? - return src.replace(/\[:\s*(\w+)\s*:\]/g, function (m, k) { + return src.replace(/\[:\s*(\w+)\s*:\]/g, (m, k) => { const ex = re.pattern[k]; if (ex) { return re.expandPatterns(ex); @@ -37,8 +39,8 @@ const re = { }); }, - isRegExp: function (r) { - return Object.prototype.toString.call(r) === '[object RegExp]'; + isRegExp: r => { + return toString.call(r) === '[object RegExp]'; }, compile: function (src, flags) { @@ -65,7 +67,6 @@ const re = { if (flags && /s/.test(flags)) { rx = rx.replace(/([^\\])\./g, '$1[^\\0]'); } - // TODO: test if MSIE and add replace \s with [\s\u00a0] if it is? // clean flags and output new regexp flags = (flags || '').replace(/[^gim]/g, ''); return (_cache[ckey] = new RegExp(rx, flags)); diff --git a/src/ribbon.js b/src/ribbon.js index 35a716f..f1ea008 100644 --- a/src/ribbon.js +++ b/src/ribbon.js @@ -28,7 +28,6 @@ export default class Ribbon { advance (n) { this.index += (typeof n === 'string') ? n.length : n; this._feed = this._org.slice(this.index); - // return this._feed; } charAt (n) { diff --git a/src/textile/attr.js b/src/textile/attr.js index 7f5d199..b317906 100644 --- a/src/textile/attr.js +++ b/src/textile/attr.js @@ -24,7 +24,9 @@ const pbaVAlignLookup = { }; export function copyAttr (s, blacklist) { - if (!s) { return undefined; } + if (!s) { + return; + } const d = {}; for (const k in s) { if (k in s && (!blacklist || !(k in blacklist))) { diff --git a/src/textile/deflist.js b/src/textile/deflist.js index 92e3459..0b3f5a6 100644 --- a/src/textile/deflist.js +++ b/src/textile/deflist.js @@ -1,5 +1,5 @@ /* definitions list parser */ -import { Element, TextNode } from '../Node.js'; +import { Element, TextNode } from '../VDOM.js'; import { parsePhrase } from './phrase.js'; import { parseFlow } from './flow.js'; diff --git a/src/textile/flow.js b/src/textile/flow.js index bc92694..fc2972b 100644 --- a/src/textile/flow.js +++ b/src/textile/flow.js @@ -2,7 +2,7 @@ ** textile flow content parser */ import Ribbon from '../Ribbon.js'; -import { Element, TextNode, RawNode, CommentNode } from '../Node.js'; +import { Element, TextNode, RawNode, CommentNode } from '../VDOM.js'; import re from '../re.js'; import { parseHtml, tokenize, parseHtmlAttr, testComment, testOpenTagBlock } from '../html.js'; @@ -69,7 +69,7 @@ function paragraph (src, { tag = 'p', attr = {}, linebreak = '\n', options }) { } }); return out; -}; +} export function parseFlow (src, options) { const root = new Element('root'); diff --git a/src/textile/glyph.js b/src/textile/glyph.js index 119d7b1..b46148b 100644 --- a/src/textile/glyph.js +++ b/src/textile/glyph.js @@ -46,4 +46,4 @@ export function parseGlyph (src) { .replace(/[([]3\/4[\])]/, '¾') .replace(/[([]o[\])]/, '°') .replace(/[([]\+\/-[\])]/, '±'); -}; +} diff --git a/src/textile/list.js b/src/textile/list.js index 9d765fb..dc04cbe 100644 --- a/src/textile/list.js +++ b/src/textile/list.js @@ -1,13 +1,13 @@ /* textile list parser */ import re from '../re.js'; -import { Element, TextNode } from '../Node.js'; - +import { Element, TextNode } from '../VDOM.js'; import { parseAttr } from './attr.js'; import { parsePhrase } from './phrase.js'; - import { txlisthd, txlisthd2 } from './re_ext.js'; + re.pattern.txlisthd = txlisthd; re.pattern.txlisthd2 = txlisthd2; + const reList = re.compile(/^((?:[:txlisthd:][^\0]*?(?:\r?\n|$))+)(\s*\n|$)/, 's'); const reItem = re.compile(/^([#*]+)([^\0]+?)(\n(?=[:txlisthd2:])|$) */, 's'); @@ -23,10 +23,8 @@ export function parseList (src, options) { const maybeMoveAttr = node => { if (node.attrCount === 1) { const firstChild = node.ul.children.find(d => d.tagName === 'li'); - // const attr = Object.assign(node.ul.attr, firstChild.attr); Object.assign(node.ul.attr, firstChild.attr); firstChild.attr = {}; - // firstChild.attr = { _offset: attr._offset }; } }; @@ -53,12 +51,10 @@ export function parseList (src, options) { ? parseInt(n[1], 10) : lastIndex[destLevel] || currIndex[destLevel] || 1; inner.advance(n[1].length); - // inner = inner.slice(n[1].length); } const [ step, attr ] = parseAttr(inner, 'li'); if (step) { - // inner = inner.slice(step); inner.advance(step); pba = attr; } diff --git a/src/textile/phrase.js b/src/textile/phrase.js index d35f582..972ee41 100644 --- a/src/textile/phrase.js +++ b/src/textile/phrase.js @@ -1,6 +1,6 @@ /* textile inline parser */ import Ribbon from '../Ribbon.js'; -import { Element, TextNode, RawNode, CommentNode } from '../Node.js'; +import { Element, TextNode, RawNode, CommentNode } from '../VDOM.js'; import re from '../re.js'; import { parseAttr } from './attr.js'; @@ -62,7 +62,6 @@ export function parsePhrase (src, options) { // FIXME: remove this if (!(src instanceof Ribbon)) { src = new Ribbon(src); - // console.error([src]); } const root = new Element('root'); diff --git a/src/textile/table.js b/src/textile/table.js index 3f94857..0b1738b 100644 --- a/src/textile/table.js +++ b/src/textile/table.js @@ -1,7 +1,7 @@ /* textile table parser */ import re from '../re.js'; -import { Element, TextNode } from '../Node.js'; +import { Element, TextNode } from '../VDOM.js'; import { parseAttr } from './attr.js'; import { parsePhrase } from './phrase.js'; import { txattr } from './re_ext.js'; @@ -27,9 +27,8 @@ export function parseColgroup (src) { const col = isCol ? {} : colgroup.attr; const pos = bit.offset; let d = String(bit).trim(); - let m; if (d) { - const m1 = m = /^\\(\d+)/.exec(d); + const m1 = /^\\(\d+)/.exec(d); if (m1) { col.span = +m1[1]; d = d.slice(m1[0].length); @@ -41,9 +40,9 @@ export function parseColgroup (src) { d = d.slice(step); } - const m2 = m = /\b\d+\b/.exec(d); + const m2 = /\b\d+\b/.exec(d); if (m2) { - col.width = +m[0]; + col.width = +m2[0]; } } if (isCol) { @@ -93,9 +92,9 @@ export function parseTable (src, options) { } if (/\./.test(innerCaption)) { // mandatory "." // FIXME: possible bug: missing glyph transforms? - const captionText = innerCaption.slice(1).replace(/\|\s*$/, '').trim(); + const captionText = innerCaption.slice(1).replace(/\|\s*$/, ''); caption = new Element('caption', attr, src.offset); - caption.appendChild(new TextNode(captionText)); + caption.appendChild(new TextNode(captionText.trim())); extended++; src.advance(m[0]); } From e91173159f24e06e10bec9efc659b1f171e6ee0f Mon Sep 17 00:00:00 2001 From: Borgar Date: Sun, 28 Mar 2021 17:26:50 +0000 Subject: [PATCH 07/35] Add textile comments to the tree but keep them hidden --- src/VDOM.js | 13 +++++++++++++ src/textile/flow.js | 12 ++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/VDOM.js b/src/VDOM.js index 5e36451..dd40ae0 100644 --- a/src/VDOM.js +++ b/src/VDOM.js @@ -3,6 +3,7 @@ import { singletons } from './constants.js'; const NODE = 0; const ELEMENT_NODE = 1; const RAW_NODE = -1; +const HIDDEN_NODE = -2; const TEXT_NODE = 3; const DOCUMENT_NODE = 9; const COMMENT_NODE = 8; @@ -107,6 +108,18 @@ export class RawNode extends Node { } } +export class HiddenNode extends Node { + constructor (data) { + super(); + this.nodeType = HIDDEN_NODE; + this.data = String(data); + } + + toHTML () { + return ''; + } +} + export class CommentNode extends Node { constructor (data) { super(); diff --git a/src/textile/flow.js b/src/textile/flow.js index fc2972b..db140c1 100644 --- a/src/textile/flow.js +++ b/src/textile/flow.js @@ -2,7 +2,7 @@ ** textile flow content parser */ import Ribbon from '../Ribbon.js'; -import { Element, TextNode, RawNode, CommentNode } from '../VDOM.js'; +import { Element, TextNode, RawNode, HiddenNode, CommentNode } from '../VDOM.js'; import re from '../re.js'; import { parseHtml, tokenize, parseHtmlAttr, testComment, testOpenTagBlock } from '../html.js'; @@ -75,6 +75,7 @@ export function parseFlow (src, options) { const root = new Element('root'); let linkRefs; + let hasHidden = false; let m; if (!(src instanceof Ribbon)) { @@ -96,7 +97,10 @@ export function parseFlow (src, options) { } // add linebreak - if (root.children.length) { + const isNotFirst = hasHidden + ? root.children.filter(d => !(d instanceof HiddenNode)).length + : root.children.length; + if (isNotFirst) { root.appendChild(new TextNode('\n')); } @@ -148,8 +152,8 @@ export function parseFlow (src, options) { else if (blockType === '###') { // ignore the insides - // FIXME: consider adding an option to expose these as HTML comments? - // FIXME: consider adding these to the parse tree and block on render? + hasHidden = true; + root.appendChild(new HiddenNode(inner)); } else if (blockType === 'pre') { From 671451d6e5c0c897a447a4c5515e855f3468a07d Mon Sep 17 00:00:00 2001 From: Borgar Date: Sun, 28 Mar 2021 17:27:30 +0000 Subject: [PATCH 08/35] Remove garbage comment --- src/VDOM.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/VDOM.js b/src/VDOM.js index dd40ae0..126ae44 100644 --- a/src/VDOM.js +++ b/src/VDOM.js @@ -208,7 +208,6 @@ export class Document extends Node { return this.children[0]; } - // FIXME: this is the same a appendChild (node) { return appendTo(this, node); } From 01df6007fc9a51ac5ab74b7c24430d2cfb8dd506 Mon Sep 17 00:00:00 2001 From: Borgar Date: Fri, 2 Apr 2021 17:34:22 +0000 Subject: [PATCH 09/35] Finished source offset support for HTML elements - Source offsets support for HTML - Clean out more old commented code - Move away from offset as 3rd parameter in elements - Unit tests for source offset --- src/VDOM.js | 31 ++- src/constants.js | 17 ++ src/html.js | 54 ++-- src/index.js | 4 +- src/ribbon.js | 17 ++ src/textile/flow.js | 76 +++--- src/textile/phrase.js | 13 +- src/textile/table.js | 21 +- test/source-offsets.js | 581 +++++++++++++++++++++++++++++++++++++++-- 9 files changed, 695 insertions(+), 119 deletions(-) diff --git a/src/VDOM.js b/src/VDOM.js index 126ae44..2155d41 100644 --- a/src/VDOM.js +++ b/src/VDOM.js @@ -47,6 +47,7 @@ function appendTo (parent, child) { return child; } + export class Node { constructor (tagName) { this.nodeType = NODE; @@ -82,6 +83,7 @@ export class Node { } } + export class TextNode extends Node { constructor (data) { super(); @@ -94,6 +96,7 @@ export class TextNode extends Node { } } + // Essentially this is the same as a textnode except it should not // merge with textnodes, and should not be post-processed. export class RawNode extends Node { @@ -108,6 +111,7 @@ export class RawNode extends Node { } } + export class HiddenNode extends Node { constructor (data) { super(); @@ -120,6 +124,7 @@ export class HiddenNode extends Node { } } + export class CommentNode extends Node { constructor (data) { super(); @@ -132,15 +137,13 @@ export class CommentNode extends Node { } } + export class Element extends Node { - constructor (tagName, attr, offsetPos) { + constructor (tagName, attr) { super(); this.tagName = tagName; this.nodeType = ELEMENT_NODE; this.attr = Object.assign({}, attr); - if (offsetPos != null) { - this.pos.offset = offsetPos; - } this.children = []; } @@ -193,6 +196,7 @@ export class Element extends Node { } } + export class Document extends Node { constructor (data) { super(); @@ -213,12 +217,15 @@ export class Document extends Node { } } + // expose constants as static props -[ Node, RawNode, TextNode, CommentNode, Element, Document ].forEach(d => { - d.NODE = NODE; - d.ELEMENT_NODE = ELEMENT_NODE; - d.RAW_NODE = RAW_NODE; - d.TEXT_NODE = TEXT_NODE; - d.DOCUMENT_NODE = DOCUMENT_NODE; - d.COMMENT_NODE = COMMENT_NODE; -}); +[ CommentNode, Document, Element, HiddenNode, Node, RawNode, TextNode ] + .forEach(d => { + d.NODE = NODE; + d.ELEMENT_NODE = ELEMENT_NODE; + d.HIDDEN_NODE = HIDDEN_NODE; + d.RAW_NODE = RAW_NODE; + d.TEXT_NODE = TEXT_NODE; + d.DOCUMENT_NODE = DOCUMENT_NODE; + d.COMMENT_NODE = COMMENT_NODE; + }); diff --git a/src/constants.js b/src/constants.js index e3180ea..64b1e58 100644 --- a/src/constants.js +++ b/src/constants.js @@ -13,3 +13,20 @@ export const singletons = { param: 1, wbr: 1 }; + +// HTML tags allowed in the document (root) level that trigger HTML parsing +export const allowedFlowBlocktags = { + p: 0, + hr: 0, + ul: 1, + ol: 0, + li: 0, + div: 1, + pre: 0, + object: 1, + script: 0, + noscript: 0, + blockquote: 1, + notextile: 1, + style: 0 +}; diff --git a/src/html.js b/src/html.js index b1f5197..fbc11e5 100644 --- a/src/html.js +++ b/src/html.js @@ -1,5 +1,4 @@ import re from './re.js'; -import Ribbon from './Ribbon.js'; import { Element, TextNode, CommentNode } from './VDOM.js'; import { singletons } from './constants.js'; @@ -46,12 +45,15 @@ const CLOSE = 'CLOSE'; const SINGLE = 'SINGLE'; const TEXT = 'TEXT'; const COMMENT = 'COMMENT'; -const WS = 'WS'; -export function tokenize (src, whitelistTags, lazy, offset) { +export function tokenize (src, whitelistTags, lazy) { const tokens = []; + const nesting = {}; + let nestCount = 0; + let m; let textMode = false; - const oktag = tag => { + + const isAllowed = tag => { if (textMode) { return tag === textMode; } @@ -60,37 +62,33 @@ export function tokenize (src, whitelistTags, lazy, offset) { } return true; }; - const nesting = {}; - let nestCount = 0; - let m; - - src = new Ribbon(String(src), offset); do { // comment - if ((m = testComment(src)) && oktag('!')) { + if ((m = testComment(src)) && isAllowed('!')) { tokens.push({ type: COMMENT, data: m[1], - pos: src.index, + index: src.index, + offset: src.offset, src: m[0] }); src.advance(m[0]); } // end tag - else if ((m = testCloseTag(src)) && oktag(m[1])) { + else if ((m = testCloseTag(src)) && isAllowed(m[1])) { const token = { type: CLOSE, tag: m[1], - pos: src.index, + index: src.index, + offset: src.offset, src: m[0] }; src.advance(m[0]); tokens.push(token); nesting[token.tag]--; nestCount--; - // console.log( '/' + token.tag, nestCount, nesting ); if (lazy && ( !nestCount || !nesting[token.tag] < 0 || @@ -105,15 +103,15 @@ export function tokenize (src, whitelistTags, lazy, offset) { } // open/void tag - else if ((m = testOpenTag(src)) && oktag(m[1])) { + else if ((m = testOpenTag(src)) && isAllowed(m[1])) { const token = { type: m[3] || m[1] in singletons ? SINGLE : OPEN, tag: m[1], - pos: src.index, + index: src.index, + offset: src.offset, src: m[0] }; token.attr = parseHtmlAttr(m[2]); - // token.attr = src.addOffset(parseHtmlAttr(m[2])); // some elements can move parser into "text" mode if (m[1] === 'script' || m[1] === 'code' || m[1] === 'style') { textMode = token.tag; @@ -134,7 +132,8 @@ export function tokenize (src, whitelistTags, lazy, offset) { tokens.push({ type: TEXT, data: m[0], - pos: src.index, + index: src.index, + offset: src.offset, src: m[0] }); } @@ -157,23 +156,22 @@ export function parseHtml (tokens, lazy) { for (let i = 0; i < tokens.length; i++) { token = tokens[i]; if (token.type === COMMENT) { - // curr.push([ '!', token.data ]); curr.appendChild(new CommentNode(token.data)); } - else if (token.type === TEXT || token.type === WS) { - // curr.push(token.data); + else if (token.type === TEXT) { curr.appendChild(new TextNode(token.data)); } else if (token.type === SINGLE) { - // curr.push(token.attr ? [ token.tag, token.attr ] : [ token.tag ]); - curr.appendChild(new Element(token.tag, token.attr)); + curr.appendChild( + new Element(token.tag, token.attr).setPos(token.offset) + ); } else if (token.type === OPEN) { // TODO: some things auto close other things:
      , +// a user can still create nonsensical but "well-formed" markup export function parseHtml (tokens, lazy) { const root = new Element('root'); const stack = []; diff --git a/src/index.js b/src/index.js index 48b9565..0e10034 100644 --- a/src/index.js +++ b/src/index.js @@ -44,7 +44,7 @@ export default function textile (sourceTx, opt) { opt = Object.assign({}, textile.defaults, opt); // run the converter return parseTextile(sourceTx, opt).toHTML(); -}; +} textile.CommentNode = CommentNode; textile.Document = Document; diff --git a/src/ribbon.js b/src/ribbon.js index 699c6bd..35a716f 100644 --- a/src/ribbon.js +++ b/src/ribbon.js @@ -86,7 +86,7 @@ export default class Ribbon { return this._feed.slice(0, s.length) === s; } - sub (start = 0, len) { + sub (start = 0, len = null) { if (len == null) { len = this._feed.length - start; } @@ -102,4 +102,4 @@ export default class Ribbon { toString () { return this._feed; } -}; +} diff --git a/test/blocks-and-html.js b/test/blocks-and-html.js index 26b41c0..4ac1e9b 100644 --- a/test/blocks-and-html.js +++ b/test/blocks-and-html.js @@ -218,5 +218,3 @@ p. This is a block. `; t.is(textile.convert(tx), op, tx); t.end(); }); - - diff --git a/test/extra_whitespace.js b/test/extra_whitespace.js index 88974fe..47c5296 100644 --- a/test/extra_whitespace.js +++ b/test/extra_whitespace.js @@ -46,4 +46,3 @@ h1. Header`;

      Header

      `, tx); t.end(); }); - diff --git a/test/filter_pba.js b/test/filter_pba.js index d6e1470..f4b2ae4 100644 --- a/test/filter_pba.js +++ b/test/filter_pba.js @@ -15,4 +15,3 @@ test('correct application of single quote entity when using styles', t => { '

      The quick brown ‘cartoon’ fox jumps over the lazy dog

      ', tx); t.end(); }); - diff --git a/test/html.js b/test/html.js index 6d58b6b..3e2b62d 100644 --- a/test/html.js +++ b/test/html.js @@ -35,27 +35,25 @@ test('html:4', t => { // Does not confirm with PHP standard. -/* -test( 'no breaks between HTML elements', function ( t ) { - let tx = "
        \n\ -\t
      • You can put HTML code right in Textile.
      • \n\ -\t
      • It will not insert a break between elements
      • \n\ -\t
      • or wrap it all in a p tag.
      • \n\ -\t
      • It should insert a hard break\n\ -if you break.
      • \n\ -
      "; - t.is( textile.convert( tx ), - "
        \n\ -\t
      • You can put HTML code right in Textile.
      • \n\ -\t
      • It will not insert a break between elements
      • \n\ -\t
      • or wrap it all in a p tag.
      • \n\ -\t
      • It should insert a hard break
        \n\ -if you break.
      • \n\ -
      ", tx ); +test.skip('no breaks between HTML elements', t => { + const tx = `
        +\t
      • You can put HTML code right in Textile.
      • +\t
      • It will not insert a break between elements
      • +\t
      • or wrap it all in a p tag.
      • +\t
      • It should insert a hard break +if you break.
      • +
      `; + t.is(textile.convert(tx), + `
        +\t
      • You can put HTML code right in Textile.
      • +\t
      • It will not insert a break between elements
      • +\t
      • or wrap it all in a p tag.
      • +\t
      • It should insert a hard break
        +if you break.
      • +
      `, tx); t.end(); }); -*/ test('line breaks', t => { const tx = `I spoke.
      @@ -155,29 +153,31 @@ test('preserves empty block standalone elements', t => { t.end(); }); -/* -test( 'unfinished standalone HTML', function ( t ) { - let tx = "
      \n\ -This is some div text.\n\n\ -More div text."; - t.is( textile.convert( tx ), - "
      \n\ -

      This is some div text.

      \n\ -

      More div text.

      ", tx ); + +test.skip('unfinished standalone HTML', t => { + const tx = `
      +This is some div text. + +More div text.`; + t.is(textile.convert(tx), + `
      +

      This is some div text.

      +

      More div text.

      `, tx); t.end(); }); -test( 'unfinished HTML block', function ( t ) { - let tx = "
      This is some div text.\n\n\ -More div text."; - t.is( textile.convert( tx ), - "
      This is some div text.
      \n\ -
      \n\ -More div text.", tx ); +test.skip('unfinished HTML block', t => { + const tx = `
      This is some div text. + +More div text.`; + t.is(textile.convert(tx), + `
      This is some div text.
      +
      +More div text.`, tx); t.end(); }); -*/ + test('complex example from real life', t => { const tx = `
      diff --git a/test/images.js b/test/images.js index 9958e87..c5fb519 100644 --- a/test/images.js +++ b/test/images.js @@ -592,5 +592,3 @@ test('with link and title and text afterward', t => { '

      description text.

      ', tx); t.end(); }); - - diff --git a/test/instiki.js b/test/instiki.js index fa298c1..9d11287 100644 --- a/test/instiki.js +++ b/test/instiki.js @@ -10,7 +10,6 @@ test('instiki:1', t => { }); - test('instiki:2', t => { const tx = '*this span is strong*'; t.is(textile.convert(tx), @@ -19,7 +18,6 @@ test('instiki:2', t => { }); - test('instiki:3', t => { const tx = '*this Camel Thing? is strong*'; t.is(textile.convert(tx), @@ -28,7 +26,6 @@ test('instiki:3', t => { }); - test('instiki:4', t => { const tx = '_this span is italic_'; t.is(textile.convert(tx), @@ -37,14 +34,12 @@ test('instiki:4', t => { }); - -/* test( 'instiki:5', function ( t ) { - let tx = "%{color:red}nested span because of Camel Word?%"; - t.is( textile.convert( tx ), - "

      nested span because of Camel Word?

      ", tx ); +test.skip('instiki:5', t => { + const tx = '%{color:red}nested span because of Camel Word?%'; + t.is(textile.convert(tx), + '

      nested span because of Camel Word?

      ', tx); t.end(); }); -*/ test('instiki:6', t => { @@ -68,7 +63,6 @@ test('instiki:6', t => { }); - test('instiki:7', t => { const tx = '--richSeymour --whyTheLuckyStiff'; t.is(textile.convert(tx), diff --git a/test/jstextile.js b/test/jstextile.js index 821ed25..4e975d3 100644 --- a/test/jstextile.js +++ b/test/jstextile.js @@ -86,7 +86,6 @@ test('Simple table with tailing space', t => { }); - test('clean trademarks #1', t => { t.is(textile.convert('(TM) and (tm), but not (Tm) or (tM)'), '

      ™ and ™, but not (Tm) or (tM)

      '); @@ -94,7 +93,6 @@ test('clean trademarks #1', t => { }); - test('clean trademarks #3', t => { t.is(textile.convert('(TM) and [TM], but not (TM] or [TM)'), '

      ™ and ™, but not (TM] or [TM)

      '); @@ -102,7 +100,6 @@ test('clean trademarks #3', t => { }); - test('clean trademarks #3', t => { // escaping works in tables t.is(textile.convert('| cat > sed | awk ==|== less |\n| 1234 | 2345 |'), @@ -120,7 +117,6 @@ test('clean trademarks #3', t => { }); - // Don't know about this. This doesn't work in RC or some other implementations. // I do expect things to work as test shows. It's disabled for now... /* @@ -156,7 +152,6 @@ test('Strange list', t => { }); - // RedCloth deviates from PHP in that it only allows [] fences. // This is good as the design gets less messy. But it causes problems as fencing links // then fails with PHP-style array links. @@ -181,7 +176,6 @@ test('Fenced PHP-style array link (3)', t => { }); - test('HTML comment (1)', t => { t.is(textile.convert('line\n\nline'), '

      line
      \n' + @@ -200,7 +194,6 @@ test('HTML comment (2)', t => { }); - test('ALL CAPS', t => { t.is(textile.convert('REYKJAVÍK'), '

      REYKJAVÍK

      '); @@ -208,7 +201,6 @@ test('ALL CAPS', t => { }); - test('Multiple classes', t => { t.is(textile.convert('p(first second). some text'), '

      some text

      ', @@ -453,7 +445,6 @@ test('strict list matching (2)', t => { }); - test('image parsing speed bug', t => { const t1 = Date.now(); textile.convert('!a()aaaaaaaaaaaaaaaaaaaaaaaaaa'); @@ -463,7 +454,6 @@ test('image parsing speed bug', t => { }); - test('image parsing speed bug 2 (issue #40)', t => { const t1 = Date.now(); textile.convert('!@((. tset Sûpp0rt ticket onññly... !@((. tset Sûpp0rt ticket onññly... !@((.'); @@ -473,7 +463,6 @@ test('image parsing speed bug 2 (issue #40)', t => { }); - test('parse inline textile in footnotes', t => { t.is(textile.convert('fn1. This is _emphasized_ *strong*'), '

      1 This is emphasized strong

      ', @@ -493,7 +482,6 @@ test('block parser bug (#21)', t => { }); - test('trailing space linebreak bug (#26)', t => { t.is(textile.convert('Line 1 \nLine 2\nLine 3'), '

      Line 1
      \nLine 2
      \nLine 3

      '); @@ -501,7 +489,6 @@ test('trailing space linebreak bug (#26)', t => { }); - test('support unicode symbols (#27)', t => { t.is(textile.convert( 'Trademark(tm)\n' + @@ -524,7 +511,6 @@ test('support unicode symbols (#27)', t => { }); - test('footnotes should not appear directly inside tags (#26)', t => { t.is(textile.convert('*[1234]* _[1234]_'), '

      [1234] [1234]

      '); @@ -532,14 +518,12 @@ test('footnotes should not appear directly inside tags (#26)', t => { }); - test('footnotes have to directly follow text (#26)', t => { t.is(textile.convert('[1234]'), '

      [1234]

      '); t.end(); }); - test('footnote links can be disabled with !', t => { t.is(textile.convert('foobar[1234!]'), '

      foobar1234

      '); @@ -547,7 +531,6 @@ test('footnote links can be disabled with !', t => { }); - test('bc blocks should not be terminated by lists (#45)', t => { t.is(textile.convert( 'bc. # here comes foo\nFoo\n# here comes bar\nBar' diff --git a/test/links.js b/test/links.js index 117ec14..5248e4e 100644 --- a/test/links.js +++ b/test/links.js @@ -10,7 +10,6 @@ test('links:1', t => { }); - test('links:2', t => { const tx = '"link text":#a'; t.is(textile.convert(tx), @@ -19,7 +18,6 @@ test('links:2', t => { }); - test('links:3', t => { const tx = '"link text":#a1'; t.is(textile.convert(tx), @@ -28,7 +26,6 @@ test('links:3', t => { }); - test('links:4', t => { const tx = '"link text":#a10'; t.is(textile.convert(tx), @@ -37,7 +34,6 @@ test('links:4', t => { }); - test('links:5', t => { const tx = '"link text":index.html'; t.is(textile.convert(tx), @@ -46,7 +42,6 @@ test('links:5', t => { }); - test('links:6', t => { const tx = '"link text":index.html#1'; t.is(textile.convert(tx), @@ -55,7 +50,6 @@ test('links:6', t => { }); - test('links:7', t => { const tx = '"link text":index.html#a'; t.is(textile.convert(tx), @@ -64,7 +58,6 @@ test('links:7', t => { }); - test('links:8', t => { const tx = '"link text":index.html#a1'; t.is(textile.convert(tx), @@ -73,7 +66,6 @@ test('links:8', t => { }); - test('links:9', t => { const tx = '"link text":index.html#a10'; t.is(textile.convert(tx), @@ -82,7 +74,6 @@ test('links:9', t => { }); - test('links:10', t => { const tx = '"link text":http://example.com/'; t.is(textile.convert(tx), @@ -91,7 +82,6 @@ test('links:10', t => { }); - test('links:11', t => { const tx = '"link text":http://example.com/#1'; t.is(textile.convert(tx), @@ -100,7 +90,6 @@ test('links:11', t => { }); - test('links:12', t => { const tx = '"link text":http://example.com/#a'; t.is(textile.convert(tx), @@ -109,7 +98,6 @@ test('links:12', t => { }); - test('links:13', t => { const tx = '"link text":http://example.com/#a1'; t.is(textile.convert(tx), @@ -118,7 +106,6 @@ test('links:13', t => { }); - test('links:14', t => { const tx = '"link text":http://example.com/#a10'; t.is(textile.convert(tx), @@ -127,7 +114,6 @@ test('links:14', t => { }); - test('links:15', t => { const tx = '"link text":http://example.com/index.html'; t.is(textile.convert(tx), @@ -136,7 +122,6 @@ test('links:15', t => { }); - test('links:16', t => { const tx = '"link text":http://example.com/index.html#a'; t.is(textile.convert(tx), @@ -145,7 +130,6 @@ test('links:16', t => { }); - test('links:17', t => { const tx = '"link text":http://example.com/index.html#1'; t.is(textile.convert(tx), @@ -154,7 +138,6 @@ test('links:17', t => { }); - test('links:18', t => { const tx = '"link text":http://example.com/index.html#a1'; t.is(textile.convert(tx), @@ -163,7 +146,6 @@ test('links:18', t => { }); - test('links:19', t => { const tx = '"link text":http://example.com/index.html#a10'; t.is(textile.convert(tx), @@ -172,7 +154,6 @@ test('links:19', t => { }); - test('links:20', t => { const tx = '"link text":http://example.com/?foo=bar'; t.is(textile.convert(tx), @@ -181,7 +162,6 @@ test('links:20', t => { }); - test('links:21', t => { const tx = '"link text":http://example.com/?foo=bar#a'; t.is(textile.convert(tx), @@ -190,7 +170,6 @@ test('links:21', t => { }); - test('links:22', t => { const tx = '"link & text":http://example.com/?foo=bar#a'; t.is(textile.convert(tx), @@ -199,7 +178,6 @@ test('links:22', t => { }); - test('links:23', t => { const tx = '"link text":http://example.com/?foo=bar#1'; t.is(textile.convert(tx), @@ -208,7 +186,6 @@ test('links:23', t => { }); - test('links:24', t => { const tx = '"link text":http://example.com/?foo=bar#a1'; t.is(textile.convert(tx), @@ -217,7 +194,6 @@ test('links:24', t => { }); - test('links:25', t => { const tx = '"link text":http://example.com/?foo=bar#a10'; t.is(textile.convert(tx), @@ -226,7 +202,6 @@ test('links:25', t => { }); - test('links:26', t => { const tx = '"link text":http://example.com/?foo=bar&a=b'; t.is(textile.convert(tx), @@ -235,7 +210,6 @@ test('links:26', t => { }); - test('links:27', t => { const tx = '"link text":http://example.com/?foo=bar&a=b#1'; t.is(textile.convert(tx), @@ -244,7 +218,6 @@ test('links:27', t => { }); - test('links:28', t => { const tx = '"link text":http://example.com/?foo=bar&a=b#a'; t.is(textile.convert(tx), @@ -253,7 +226,6 @@ test('links:28', t => { }); - test('links:29', t => { const tx = '"link text":http://example.com/?foo=bar&a=b#a1'; t.is(textile.convert(tx), @@ -262,7 +234,6 @@ test('links:29', t => { }); - test('links:30', t => { const tx = '"link text":http://example.com/?foo=bar&a=b#a10'; t.is(textile.convert(tx), @@ -271,7 +242,6 @@ test('links:30', t => { }); - test('links:31', t => { const tx = 'This is a "link":http://example.com/'; t.is(textile.convert(tx), @@ -280,7 +250,6 @@ test('links:31', t => { }); - test('links:32', t => { const tx = 'This is a "link":http://example.com/.'; t.is(textile.convert(tx), @@ -289,7 +258,6 @@ test('links:32', t => { }); - test('links:33', t => { const tx = 'This is a "link":http://example.com/index.html.'; t.is(textile.convert(tx), @@ -298,7 +266,6 @@ test('links:33', t => { }); - test('links:34', t => { const tx = 'This is a "link":http://example.com/index.html#a.'; t.is(textile.convert(tx), @@ -307,7 +274,6 @@ test('links:34', t => { }); - test('links:35', t => { const tx = 'This is a "link":http://example.com/index.html#1.'; t.is(textile.convert(tx), @@ -316,7 +282,6 @@ test('links:35', t => { }); - test('links:36', t => { const tx = 'This is a "link":http://example.com/index.html#a1.'; t.is(textile.convert(tx), @@ -325,7 +290,6 @@ test('links:36', t => { }); - test('links:37', t => { const tx = 'This is a "link":http://example.com/index.html#a10.'; t.is(textile.convert(tx), @@ -334,7 +298,6 @@ test('links:37', t => { }); - test('links:38', t => { const tx = 'This is a "link":http://example.com/?foo=bar.'; t.is(textile.convert(tx), @@ -343,7 +306,6 @@ test('links:38', t => { }); - test('links:39', t => { const tx = 'This is a "link":http://example.com/?foo=bar#1.'; t.is(textile.convert(tx), @@ -352,7 +314,6 @@ test('links:39', t => { }); - test('links:40', t => { const tx = 'This is a "link":http://example.com/?foo=bar#a.'; t.is(textile.convert(tx), @@ -361,7 +322,6 @@ test('links:40', t => { }); - test('links:41', t => { const tx = 'This is a "link":http://example.com/?foo=bar#a1.'; t.is(textile.convert(tx), @@ -370,7 +330,6 @@ test('links:41', t => { }); - test('links:42', t => { const tx = 'This is a "link":http://example.com/?foo=bar#a10.'; t.is(textile.convert(tx), @@ -379,7 +338,6 @@ test('links:42', t => { }); - test('links:43', t => { const tx = 'This is a "link":http://example.com/?foo=bar#a10, but this is not.'; t.is(textile.convert(tx), @@ -388,7 +346,6 @@ test('links:43', t => { }); - test('links:44', t => { const tx = '(This is a "link":http://example.com/?foo=bar#a10) but this is not.'; t.is(textile.convert(tx), @@ -397,7 +354,6 @@ test('links:44', t => { }); - test('links:45', t => { const tx = '"link text(link title)":http://example.com/'; t.is(textile.convert(tx), @@ -406,7 +362,6 @@ test('links:45', t => { }); - test('link with title attribute', t => { const tx = '"(link) text(link title)":http://example.com/'; t.is(textile.convert(tx), @@ -415,7 +370,6 @@ test('link with title attribute', t => { }); - test('link with space between link text and title attribute', t => { const tx = '"text (link title)":http://example.com/'; t.is(textile.convert(tx), @@ -424,7 +378,6 @@ test('link with space between link text and title attribute', t => { }); - test('links:48', t => { const tx = '"Dive Into XML":http://www.xml.com/pub/au/164'; t.is(textile.convert(tx), @@ -433,7 +386,6 @@ test('links:48', t => { }); - test('links:49', t => { const tx = '"Lab Exercises":../lab/exercises/exercises.html.'; t.is(textile.convert(tx), @@ -442,7 +394,6 @@ test('links:49', t => { }); - test('links:50', t => { const tx = 'Go to "discuss":http://www.dreammoods.com/cgibin/cutecast/cutecast.pl?forum=1&thread=26627 to discuss.'; t.is(textile.convert(tx), @@ -451,7 +402,6 @@ test('links:50', t => { }); - test('links:51', t => { const tx = '* "rubylang":http://www.ruby-lang.org/en/'; t.is(textile.convert(tx), @@ -462,7 +412,6 @@ test('links:51', t => { }); - test('links:52', t => { const tx = 'The ION coding style document found at "IONCodingStyleGuide.doc":http://perforce:8081/@md=d&cd=//&c=82E@//depot/systest/system/main/pub/doc/IONCodingStyleGuide.doc?ac=22 codifies a couple of rules to ensure reasonably consistent code and documentation of libraries in ION. Test text'; t.is(textile.convert(tx), @@ -471,7 +420,6 @@ test('links:52', t => { }); - test('links:53', t => { const tx = '"testing":'; t.is(textile.convert(tx), @@ -480,7 +428,6 @@ test('links:53', t => { }); - test('trailing space not absorbed by link', t => { const tx = '"Link":/foo.html me'; t.is(textile.convert(tx), @@ -489,7 +436,6 @@ test('trailing space not absorbed by link', t => { }); - test('trailing comma stays outside link', t => { const tx = '"Link":/foo.html, me'; t.is(textile.convert(tx), @@ -498,7 +444,6 @@ test('trailing comma stays outside link', t => { }); - test('trailing exclamation stays outside link', t => { const tx = '"Link":/foo.html! me'; t.is(textile.convert(tx), @@ -507,7 +452,6 @@ test('trailing exclamation stays outside link', t => { }); - test('trailing semicolon stays outside link', t => { const tx = '"Link":/foo.html; me'; t.is(textile.convert(tx), @@ -516,7 +460,6 @@ test('trailing semicolon stays outside link', t => { }); - test('trailing period stays outside link', t => { const tx = '"Link":/foo.html.'; t.is(textile.convert(tx), @@ -525,7 +468,6 @@ test('trailing period stays outside link', t => { }); - test('whose text is a parenthetical statement', t => { const tx = '"(just in case you were wondering)":http://slashdot.org/'; t.is(textile.convert(tx), @@ -534,7 +476,6 @@ test('whose text is a parenthetical statement', t => { }); - test('that has a class and whose text is a parenthetical statement', t => { const tx = '"(myclass) (just in case you were wondering)":http://slashdot.org/'; t.is(textile.convert(tx), @@ -543,7 +484,6 @@ test('that has a class and whose text is a parenthetical statement', t => { }); - test('link containing parentheses', t => { const tx = '"It is (very) fortunate that this works":http://slashdot.org/'; t.is(textile.convert(tx), @@ -552,7 +492,6 @@ test('link containing parentheses', t => { }); - test('link containing quotes', t => { const tx = '"He said it is "very unlikely" this works":http://slashdot.org/'; t.is(textile.convert(tx), @@ -561,7 +500,6 @@ test('link containing quotes', t => { }); - test('link containing multiple quotes', t => { const tx = '"He said it is "very unlikely" the "economic stimulus" works":http://slashdot.org/'; t.is(textile.convert(tx), @@ -570,7 +508,6 @@ test('link containing multiple quotes', t => { }); - test('linked quoted phrase', t => { const tx = '""Open the pod bay doors please, HAL."":http://www.youtube.com/watch?v=npN9l2Bd06s'; t.is(textile.convert(tx), @@ -579,7 +516,6 @@ test('linked quoted phrase', t => { }); - test('link following quoted phrase', t => { const tx = '"quote" text "quote" text "link":http://google.com'; t.is(textile.convert(tx), @@ -588,7 +524,6 @@ test('link following quoted phrase', t => { }); - test('links containing underscores', t => { const tx = 'This is a link to a "Wikipedia article about Barack":http://en.wikipedia.org/wiki/Barack_Obama'; t.is(textile.convert(tx), @@ -597,7 +532,6 @@ test('links containing underscores', t => { }); - test('links containing parentheses', t => { const tx = 'This is a link to a ["Wikipedia article about Textile":http://en.wikipedia.org/wiki/Textile_(markup_language)]'; t.is(textile.convert(tx), @@ -606,7 +540,6 @@ test('links containing parentheses', t => { }); - test('links contained in parentheses', t => { const tx = 'This is a regular link (but in parentheses: "Google":http://www.google.com)'; t.is(textile.convert(tx), @@ -615,7 +548,6 @@ test('links contained in parentheses', t => { }); - test('links containing parentheses without brackets', t => { const tx = 'This is a link to a "Wikipedia article about Textile":http://en.wikipedia.org/wiki/Textile_(markup_language)'; t.is(textile.convert(tx), @@ -624,7 +556,6 @@ test('links containing parentheses without brackets', t => { }); - test('links containing parentheses period at end without brackets', t => { const tx = 'This is a link to a "Wikipedia article about Textile":http://en.wikipedia.org/wiki/Textile_(markup_language).'; t.is(textile.convert(tx), @@ -633,7 +564,6 @@ test('links containing parentheses period at end without brackets', t => { }); - test('broken links containing parentheses without brackets', t => { const tx = 'This is a link to a "Wikipedia article about Textile":http://en.wikipedia.org/wiki/Textile_(markup_language'; t.is(textile.convert(tx), @@ -642,7 +572,6 @@ test('broken links containing parentheses without brackets', t => { }); - test('links containing parentheses without brackets inside a parenthesis', t => { const tx = 'Textile is awesome! (Check out the "Wikipedia article about Textile":http://en.wikipedia.org/wiki/Textile_(markup_language))'; t.is(textile.convert(tx), @@ -651,7 +580,6 @@ test('links containing parentheses without brackets inside a parenthesis', t => }); - test('quotes and follow link', t => { const tx = 'Some "text" followed by a "link":http://redcloth.org.'; t.is(textile.convert(tx), @@ -660,7 +588,6 @@ test('quotes and follow link', t => { }); - test('link alias containing dashes', t => { const tx = `"link":google-rocks @@ -671,7 +598,6 @@ test('link alias containing dashes', t => { }); - test('contained in multi-paragraph quotes', t => { const tx = `"I first learned about "Redcloth":http://redcloth.org/ several years ago. @@ -683,7 +609,6 @@ test('contained in multi-paragraph quotes', t => { }); - test('as html in notextile contained in multi-paragraph quotes', t => { const tx = `"Here is a link. @@ -695,7 +620,6 @@ test('as html in notextile contained in multi-paragraph quotes', t => { }); - test('contained in para with multiple quotes', t => { const tx = '"My wife, Tipper, and I will donate 100% of the proceeds of the award to the "Alliance For Climate Protection":http://www.looktothestars.org/charity/638-alliance-for-climate-protection," said Gore in an email. "I am deeply honored to receive the Nobel Peace Prize."'; t.is(textile.convert(tx), @@ -704,7 +628,6 @@ test('contained in para with multiple quotes', t => { }); - test('with caps in the title', t => { const tx = '"British Skin Foundation (BSF)":http://www.britishskinfoundation.org.uk'; t.is(textile.convert(tx), @@ -713,7 +636,6 @@ test('with caps in the title', t => { }); - test('containing HTML tags with quotes', t => { const tx = '"Apply online*apply online*":/admissions/apply/'; t.is(textile.convert(tx), @@ -721,4 +643,3 @@ test('containing HTML tags with quotes', t => { t.end(); }); - diff --git a/test/options.js b/test/options.js index da4dd66..1ee290f 100644 --- a/test/options.js +++ b/test/options.js @@ -11,6 +11,7 @@ test('jstextile options', t => { t.end(); }); + test('jstextile options', t => { // linebreak option works in tables t.is(textile.convert('|a|b\nc|d|\n|a|b|c|\n'), @@ -42,6 +43,7 @@ test('jstextile options', t => { t.end(); }); + test('jstextile options', t => { const paragraph = 'Some paragraph\nwith a linebreak.'; const savedOptions = {}; diff --git a/test/poignant.js b/test/poignant.js index 0951275..d810d06 100644 --- a/test/poignant.js +++ b/test/poignant.js @@ -66,5 +66,3 @@ Now that you've met @false@, I'm sure you can see what's on next.`;

      Now that you’ve met false, I’m sure you can see what’s on next.

      `, tx); t.end(); }); - - diff --git a/test/table.js b/test/table.js index 267d5d7..83ddb95 100644 --- a/test/table.js +++ b/test/table.js @@ -25,7 +25,6 @@ h3. A header after the table`; }); - test('table:2', t => { const tx = `|_. a|_. b|_. c| |1|2|3|`; @@ -46,7 +45,6 @@ test('table:2', t => { }); - test('table:3', t => { const tx = `|This|is|a|simple|table| |This|is|a|simple|row|`; @@ -71,7 +69,6 @@ test('table:3', t => { }); - test('table:4', t => { const tx = `table{border:1px solid black}. |This|is|a|row| @@ -95,7 +92,6 @@ test('table:4', t => { }); - test('table:5', t => { const tx = '{background:#ddd}. |This|is|a|row|'; t.is(textile.convert(tx), @@ -111,7 +107,6 @@ test('table:5', t => { }); - test('table:6', t => { const tx = `|a|b|c| | |2|3|`; @@ -132,7 +127,6 @@ test('table:6', t => { }); - test('table:7', t => { const tx = `table{width: 200px; border:2px solid gray;}. |_=. Alignment| @@ -174,7 +168,6 @@ test('table:7', t => { }); - test('table:8', t => { const tx = `|{background:#ddd}. Cell with gray background|Normal cell| |\\2. Cell spanning 2 columns| @@ -206,7 +199,6 @@ test('table:8', t => { }); - test('row spanning mid-row', t => { const tx = `|1|2|3| |1|/3. 2|3| @@ -243,7 +235,6 @@ test('row spanning mid-row', t => { }); - test('table:10', t => { const tx = `{background:#ddd}. |S|Target|Complete|App|Milestone| |!/i/g.gif!|11/29/04|11/29/04|011|XML spec complete (KH is on schedule)| @@ -308,7 +299,6 @@ test('table:10', t => { }); - test('combined table header and colspan', t => { const tx = `table(my_class). |_\\2. a |_. b |_. c | @@ -331,7 +321,6 @@ test('combined table header and colspan', t => { }); - test('two adjacent tables', t => { const tx = `|a|b|c| @@ -355,7 +344,6 @@ test('two adjacent tables', t => { }); - test('with cell attributes', t => { const tx = '|[en]. lang-ok|{color:red;}. style-ok|(myclass). class-ok|'; t.is(textile.convert(tx), @@ -370,7 +358,6 @@ test('with cell attributes', t => { }); - test('with improper cell attributes', t => { const tx = '|[en]lang-bad|{color:red;}style-bad|(myclass)class-bad|'; t.is(textile.convert(tx), @@ -385,7 +372,6 @@ test('with improper cell attributes', t => { }); - test('with line breaks in the cell', t => { const tx = `|a|b b| @@ -408,7 +394,6 @@ c
      ,
    • ,

      , // https://html.spec.whatwg.org/multipage/syntax.html#syntax-tag-omission - // const elm = token.attr ? [ token.tag, token.attr ] : [ token.tag ]; - // curr.push(elm); - const elm = curr.appendChild(new Element(token.tag, token.attr)); + const elm = curr.appendChild( + new Element(token.tag, token.attr).setPos(token.offset) + ); stack.push(elm); curr = elm; } @@ -189,11 +187,11 @@ export function parseHtml (tokens, lazy) { } } if (!stack.length && lazy) { - root.children.sourceLength = token.pos + token.src.length; + root.children.sourceLength = token.index + token.src.length; return root.children; } } } - root.children.sourceLength = token ? token.pos + token.src.length : 0; + root.children.sourceLength = token ? token.index + token.src.length : 0; return root.children; } diff --git a/src/index.js b/src/index.js index 948db61..024ff57 100644 --- a/src/index.js +++ b/src/index.js @@ -6,8 +6,7 @@ */ import { parseFlow } from './textile/flow.js'; -export { parseHtml } from './html.js'; -import { Document, Element, RawNode, TextNode, CommentNode } from './VDOM.js'; +import { CommentNode, Document, Element, HiddenNode, Node, RawNode, TextNode } from './VDOM.js'; function parseTextile (tx, opt) { const root = new Document(); @@ -51,6 +50,7 @@ textile.Document = Document; textile.Element = Element; textile.RawNode = RawNode; textile.TextNode = TextNode; +export { CommentNode, Document, Element, HiddenNode, Node, RawNode, TextNode }; // options textile.defaults = { diff --git a/src/ribbon.js b/src/ribbon.js index f1ea008..f814495 100644 --- a/src/ribbon.js +++ b/src/ribbon.js @@ -28,6 +28,7 @@ export default class Ribbon { advance (n) { this.index += (typeof n === 'string') ? n.length : n; this._feed = this._org.slice(this.index); + return this; } charAt (n) { @@ -70,6 +71,18 @@ export default class Ribbon { return this; } + trimStart () { + const start = /^\s*/.exec(this._feed)[0].length; + return this.sub(start); + } + + trimEnd () { + const end = /\s*$/.exec(this._feed)[0].length; + const slice = new Ribbon(this._feed.slice(0, this._feed.length - end)); + slice.skew = this.index + this.skew; + return slice; + } + trim () { const start = /^\s*/.exec(this._feed)[0].length; const end = /\s*$/.exec(this._feed)[0].length; @@ -85,6 +98,10 @@ export default class Ribbon { return this._feed.slice(0, s.length) === s; } + clone () { + return this.sub(0); + } + sub (start = 0, len = null) { if (len == null) { len = this._feed.length - start; diff --git a/src/textile/flow.js b/src/textile/flow.js index db140c1..a6957a7 100644 --- a/src/textile/flow.js +++ b/src/textile/flow.js @@ -6,7 +6,7 @@ import { Element, TextNode, RawNode, HiddenNode, CommentNode } from '../VDOM.js' import re from '../re.js'; import { parseHtml, tokenize, parseHtmlAttr, testComment, testOpenTagBlock } from '../html.js'; -import { singletons } from '../constants.js'; +import { singletons, allowedFlowBlocktags } from '../constants.js'; import { parsePhrase } from './phrase.js'; import { copyAttr, parseAttr } from './attr.js'; @@ -19,22 +19,6 @@ re.pattern.txblocks = txblocks; re.pattern.txlisthd = txlisthd; re.pattern.txattr = txattr; -// HTML tags allowed in the document (root) level that trigger HTML parsing -const allowedBlocktags = { - p: 0, - hr: 0, - ul: 1, - ol: 0, - li: 0, - div: 1, - pre: 0, - object: 1, - script: 0, - noscript: 0, - blockquote: 1, - notextile: 1 -}; - const reBlock = re.compile(/^([:txblocks:])/); const reBlockNormal = re.compile(/^(.*?)($|\r?\n(?=[:txlisthd:])|\r?\n(?:\s*\n|$)+)/, 's'); const reBlockExtended = re.compile(/^(.*?)($|\r?\n(?=[:txlisthd:])|\r?\n+(?=[:txblocks:][:txattr:]\.))/, 's'); @@ -63,7 +47,7 @@ function paragraph (src, { tag = 'p', attr = {}, linebreak = '\n', options }) { if (linebreak && i) { out.push(new TextNode('\n')); } - const elm = new Element(tag, attr, bit.offset); + const elm = new Element(tag, attr).setPos(bit.offset); elm.appendChild(parsePhrase(bit, options)); out.push(elm); } @@ -135,14 +119,14 @@ export function parseFlow (src, options) { options: options }); root - .appendChild(new Element('blockquote', attr, outerOffs)) + .appendChild(new Element('blockquote', attr).setPos(outerOffs)) .appendChild([ new TextNode('\n'), ...par, new TextNode('\n') ]); } else if (blockType === 'bc') { root - .appendChild(new Element('pre', attr, outerOffs)) - .appendChild(new Element('code', copyAttr(attr, { id: 1 }), outerOffs)) + .appendChild(new Element('pre', attr).setPos(outerOffs)) + .appendChild(new Element('code', copyAttr(attr, { id: 1 })).setPos(outerOffs)) .appendChild(new RawNode(inner)); } @@ -153,7 +137,7 @@ export function parseFlow (src, options) { else if (blockType === '###') { // ignore the insides hasHidden = true; - root.appendChild(new HiddenNode(inner)); + root.appendChild(new HiddenNode(inner).setPos(outerOffs)); } else if (blockType === 'pre') { @@ -161,7 +145,7 @@ export function parseFlow (src, options) { // "pre(foo#bar).. line1\n\nline2" prevents multiline preformat blocks // ...which seems like the whole point of having an extended pre block? root - .appendChild(new Element('pre', attr, outerOffs)) + .appendChild(new Element('pre', attr).setPos(outerOffs)) .appendChild(new RawNode(inner)); } @@ -172,12 +156,12 @@ export function parseFlow (src, options) { attr.class = (attr.class ? attr.class + ' ' : '') + 'footnote'; attr.id = 'fn' + fnid; const subAttr = copyAttr(attr, { id: 1, class: 1 }); - const fnLink = new Element('a', { href: '#fnr' + fnid, ...subAttr }, pos); + const fnLink = new Element('a', { href: '#fnr' + fnid, ...subAttr }).setPos(pos); fnLink - .appendChild(new Element('sup', subAttr, pos)) + .appendChild(new Element('sup', subAttr).setPos(pos)) .appendChild(new TextNode(fnid)); root - .appendChild(new Element('p', attr, pos)) + .appendChild(new Element('p', attr).setPos(pos)) .appendChild([ fnLink, new TextNode(' '), @@ -211,19 +195,20 @@ export function parseFlow (src, options) { const tag = m[1]; // Is block tag? ... - if (tag in allowedBlocktags) { - const pos = src.off; + if (tag in allowedFlowBlocktags) { if (m[3] || tag in singletons) { // single? + const pos = src.offset; src.advance(m[0]); if (/^\s*(\n|$)/.test(src)) { - const attr = parseHtmlAttr(m[2]); - root.appendChild(new Element(tag, attr, pos)); + root.appendChild( + new Element(tag, parseHtmlAttr(m[2])).setPos(pos) + ); src.skipWS(); continue; } } else if (tag === 'pre') { - const t = tokenize(src, { pre: 1, code: 1 }, tag); + const t = tokenize(src.clone(), { pre: 1, code: 1 }, tag); const p = parseHtml(t, true); src.load(); src.advance(p.sourceLength); @@ -235,7 +220,7 @@ export function parseFlow (src, options) { } else if (tag === 'notextile') { // merge all child elements - const t = tokenize(src, null, tag); + const t = tokenize(src.clone(), null, tag); let s = 1; // start after open tag while (/^\s+$/.test(t[s].src)) { s++; // skip whitespace @@ -243,7 +228,7 @@ export function parseFlow (src, options) { const p = parseHtml(t.slice(s, -1), true); const x = t.pop(); src.load(); - src.advance(x.pos + x.src.length); + src.advance(x.index + x.src.length); if (/^\s*(\n|$)/.test(src)) { root.appendChild(p); src.skipWS(); // skip tailing whitespace @@ -252,23 +237,30 @@ export function parseFlow (src, options) { } else { src.skipWS(); - const t = tokenize(src, null, tag); - const x = t.pop(); // this should be the end tag + const offs = src.offset; + const tokens = tokenize(src.clone(), null, tag); + const endTag = tokens.pop(); // this should be the end tag let s = 1; // start after open tag - while (t[s] && /^[\n\r]+$/.test(t[s].src)) { + while (tokens[s] && /^[\n\r]+$/.test(tokens[s].src)) { s++; // skip whitespace } - if (x.tag === tag) { + if (endTag.tag === tag) { // inner can be empty - const inner = (t.length > 1) ? String(src).slice(t[s].pos, x.pos) : ''; - src.advance(x.pos + x.src.length); + const inner = tokens.length > 1 + ? src.sub(tokens[s].index, endTag.index - tokens[s].index) + : new Ribbon(''); + + src.advance(endTag.index + endTag.src.length); + if (/^\s*(\n|$)/.test(src)) { - const elm = new Element(tag, parseHtmlAttr(m[2])); + const elm = new Element(tag, parseHtmlAttr(m[2])).setPos(offs); if (tag === 'script' || tag === 'style') { elm.appendChild(new TextNode(inner)); } else { - const innerHTML = inner.replace(/^\n+/, '').replace(/\s*$/, ''); + const sO = /^\n*/.exec(inner)[0].length; + const eO = /\s*$/.exec(inner)[0].length; + const innerHTML = inner.sub(sO, inner.length - sO - eO); const isBlock = /\n\r?\n/.test(innerHTML) || tag === 'ol' || tag === 'ul'; const innerElm = isBlock ? parseFlow(innerHTML, options) @@ -294,7 +286,7 @@ export function parseFlow (src, options) { // ruler if ((m = reRuler.exec(src))) { - root.appendChild(new Element('hr', null, src.offset)); + root.appendChild(new Element('hr').setPos(src.offset)); src.advance(m[0]); continue; } diff --git a/src/textile/phrase.js b/src/textile/phrase.js index 972ee41..196ccae 100644 --- a/src/textile/phrase.js +++ b/src/textile/phrase.js @@ -1,5 +1,4 @@ /* textile inline parser */ -import Ribbon from '../Ribbon.js'; import { Element, TextNode, RawNode, CommentNode } from '../VDOM.js'; import re from '../re.js'; @@ -59,11 +58,6 @@ const getMatchRe = (tok, fence, code) => { }; export function parsePhrase (src, options) { - // FIXME: remove this - if (!(src instanceof Ribbon)) { - src = new Ribbon(src); - } - const root = new Element('root'); let m; @@ -138,12 +132,12 @@ export function parsePhrase (src, options) { if (m[4]) { // +cite causes image to be wraped with a link (or link_ref)? // TODO: support link_ref for image cite root - .appendChild(new Element('a', { href: m[4] }, src.offset)) - .appendChild(new Element('img', attr, src.offset)); + .appendChild(new Element('a', { href: m[4] }).setPos(src.offset)) + .appendChild(new Element('img', attr).setPos(src.offset)); } else { root - .appendChild(new Element('img', attr, src.offset)); + .appendChild(new Element('img', attr).setPos(src.offset)); } src.advance(m[0]); continue; @@ -155,6 +149,7 @@ export function parsePhrase (src, options) { root.appendChild(new CommentNode(m[1])); continue; } + // html tag // TODO: this seems to have a lot of overlap with block tags... DRY? if ((m = testOpenTag(src))) { diff --git a/src/textile/table.js b/src/textile/table.js index 0b1738b..e28d760 100644 --- a/src/textile/table.js +++ b/src/textile/table.js @@ -22,22 +22,21 @@ const charToTag = { }; export function parseColgroup (src) { - const colgroup = new Element('colgroup', {}, src.offset); + const colgroup = new Element('colgroup', {}).setPos(src.offset); src.splitBy(/\|/, (bit, isCol) => { const col = isCol ? {} : colgroup.attr; - const pos = bit.offset; - let d = String(bit).trim(); + let d = bit.trim(); if (d) { const m1 = /^\\(\d+)/.exec(d); if (m1) { col.span = +m1[1]; - d = d.slice(m1[0].length); + d = d.sub(m1[0].length); } const [ step, attr ] = parseAttr(d, 'col'); if (step) { Object.assign(col, attr); - d = d.slice(step); + d = d.sub(step); } const m2 = /\b\d+\b/.exec(d); @@ -47,7 +46,7 @@ export function parseColgroup (src) { } if (isCol) { colgroup.appendChild(new TextNode('\n\t\t')); - colgroup.appendChild(new Element('col', col, pos)); + colgroup.appendChild(new Element('col', col).setPos(bit.offset)); } }); @@ -63,13 +62,13 @@ export function parseTable (src, options) { const rowgroups = []; let colgroup; let caption; - const table = new Element('table', null, src.offset); + const table = new Element('table').setPos(src.offset); let currentTBody; let m; let extended = 0; const setRowGroup = (type, attr, pos) => { - currentTBody = new Element(type, attr, pos); + currentTBody = new Element(type, attr).setPos(pos); rowgroups.push(currentTBody); }; @@ -93,7 +92,7 @@ export function parseTable (src, options) { if (/\./.test(innerCaption)) { // mandatory "." // FIXME: possible bug: missing glyph transforms? const captionText = innerCaption.slice(1).replace(/\|\s*$/, ''); - caption = new Element('caption', attr, src.offset); + caption = new Element('caption', attr).setPos(src.offset); caption.appendChild(new TextNode(captionText.trim())); extended++; src.advance(m[0]); @@ -126,7 +125,7 @@ export function parseTable (src, options) { } const attr = parseAttr(m[3], 'tr')[1]; // FIXME: requires "\.\s?" -- else what ? - const row = new Element('tr', attr, rowPos); + const row = new Element('tr', attr).setPos(rowPos); currentTBody.appendChild(new TextNode('\n\t\t')); currentTBody.appendChild(row); const inner = src.sub(m[1].length, m[4].length); @@ -148,7 +147,7 @@ export function parseTable (src, options) { const [ step, attr ] = parseAttr(inner, 'td'); inner.advance(step); - let cell = new Element(isTh ? 'th' : 'td', attr, cellPos); + let cell = new Element(isTh ? 'th' : 'td', attr).setPos(cellPos); if (step || isTh) { const p = /^\.\s*/.exec(inner); diff --git a/test/source-offsets.js b/test/source-offsets.js index dc4917e..0d11447 100644 --- a/test/source-offsets.js +++ b/test/source-offsets.js @@ -1,29 +1,580 @@ import test from 'tape'; -import { parseTree } from '../src/index.js'; - -function simplify (node) { - const tag = node.tagName || 'ROOT'; - let children = node.children && node.children.filter(d => d.nodeType === 1); - if (children && children.length) { - children = children.map(simplify); - return [ tag, node.pos.offset, children ]; - } - return [ tag, node.pos.offset ]; -} +import { parseTree, Element } from '../src/index.js'; function parse (tx) { const tree = parseTree(tx); - return simplify(tree); + const struct = []; + + tree.visit(node => { + if (node instanceof Element) { + if (node.tagName === 'root') { return; } + const offset = node.pos ? node.pos.offset : null; + const source = tx.slice(offset, offset + 40).replace(/(\n)[^\0]*$/, '$1'); + struct.push([ + node.tagName, + offset, + source + ]); + } + }); + + return struct; } -test('paragraph', t => { +test('p', t => { t.deepEqual( parse('one\n\ntwo'), - [ 'ROOT', 0, [ [ 'p', 0 ], [ 'p', 5 ] ] ] + [ [ 'p', 0, 'one\n' ], + [ 'p', 5, 'two' ] ], + 'auto paragraphs' ); t.deepEqual( parse('p. one\n\np. two'), - [ 'ROOT', 0, [ [ 'p', 0 ], [ 'p', 8 ] ] ] + [ [ 'p', 0, 'p. one\n' ], + [ 'p', 8, 'p. two' ] ], + 'named paragraphs' + ); + t.deepEqual( + parse('p.. one\n\ntwo'), + [ [ 'p', 0, 'p.. one\n' ], + [ 'p', 9, 'two' ] ], + 'extended paragraph' + ); + t.end(); +}); + +test('###', t => { + t.deepEqual( + parse('one\n\n###. comment\n\ntwo'), + [ [ 'p', 0, 'one\n' ], + [ 'p', 19, 'two' ] ], + 'named comment' + ); + t.deepEqual( + parse('###.. one\n\ntwo\n\np. foo'), + [ [ 'p', 16, 'p. foo' ] ], + 'extended comment' + ); + t.deepEqual( + parse('p. one\n\n###. comment\n\np. two'), + [ [ 'p', 0, 'p. one\n' ], + [ 'p', 22, 'p. two' ] ], + 'comment in between paragraphs' + ); + const tree = parseTree('one\n\n###. comment\n\ntwo'); + const comment = tree.children[2]; + t.is(comment.nodeType, Element.HIDDEN_NODE, 'comment exists in ast (nodeType)'); + t.is(comment.data, 'comment', 'comment exists in ast (data)'); + t.is(comment.pos.offset, 5, 'comment exists in ast (offset)'); + t.end(); +}); + +test('bc', t => { + t.deepEqual( + parse('bc. one\n\nbc. two'), + [ [ 'pre', 0, 'bc. one\n' ], + [ 'code', 0, 'bc. one\n' ], + [ 'pre', 9, 'bc. two' ], + [ 'code', 9, 'bc. two' ] ] + ); + t.deepEqual( + parse('bc.. one\n\ntwo'), + [ [ 'pre', 0, 'bc.. one\n' ], + [ 'code', 0, 'bc.. one\n' ] ] + ); + t.end(); +}); + +test('bq', t => { + t.deepEqual( + parse('bq. one\n\nbq. two'), + [ [ 'blockquote', 0, 'bq. one\n' ], + [ 'p', 4, 'one\n' ], + [ 'blockquote', 9, 'bq. two' ], + [ 'p', 13, 'two' ] ] + ); + t.deepEqual( + parse('bq.. one\n\ntwo'), + [ [ 'blockquote', 0, 'bq.. one\n' ], + [ 'p', 5, 'one\n' ], + [ 'p', 10, 'two' ] ] + ); + t.end(); +}); + +test('fn#', t => { + t.deepEqual( + parse('fn1. one\n\nfn1. two'), + [ [ 'p', 5, 'one\n' ], + [ 'a', 5, 'one\n' ], + [ 'sup', 5, 'one\n' ], + [ 'p', 15, 'two' ], + [ 'a', 15, 'two' ], + [ 'sup', 15, 'two' ] ], + 'named footnote' + ); + t.deepEqual( + parse('fn1.. one\n\ntwo'), + [ [ 'p', 6, 'one\n' ], + [ 'a', 6, 'one\n' ], + [ 'sup', 6, 'one\n' ], + [ 'br', 9, '\n' ] ], + 'extended footnote' + ); + t.deepEqual( + parse('one[1] two'), + [ [ 'p', 0, 'one[1] two' ], + [ 'sup', 3, '[1] two' ], + [ 'a', 3, '[1] two' ] ], + 'footnote reference' + ); + t.end(); +}); + +test('h#', t => { + t.deepEqual( + parse('h1. one\n\nh1. two'), + [ [ 'h1', 0, 'h1. one\n' ], + [ 'h1', 9, 'h1. two' ] ], + 'h1' + ); + t.deepEqual( + parse('h1.. one\n\ntwo'), + [ [ 'h1', 0, 'h1.. one\n' ], + [ 'h1', 10, 'two' ] ], + 'h1 extended' + ); + t.deepEqual( + parse('h2. one\n\nh2. two'), + [ [ 'h2', 0, 'h2. one\n' ], + [ 'h2', 9, 'h2. two' ] ], + 'h2' + ); + t.deepEqual( + parse('h2.. one\n\ntwo'), + [ [ 'h2', 0, 'h2.. one\n' ], + [ 'h2', 10, 'two' ] ], + 'h2 extended' + ); + t.deepEqual( + parse('h3. one\n\nh3. two'), + [ [ 'h3', 0, 'h3. one\n' ], + [ 'h3', 9, 'h3. two' ] ], + 'h3' + ); + t.deepEqual( + parse('h3.. one\n\ntwo'), + [ [ 'h3', 0, 'h3.. one\n' ], + [ 'h3', 10, 'two' ] ], + 'h3 extended' + ); + t.deepEqual( + parse('h4. one\n\nh4. two'), + [ [ 'h4', 0, 'h4. one\n' ], + [ 'h4', 9, 'h4. two' ] ], + 'h4' + ); + t.deepEqual( + parse('h4.. one\n\ntwo'), + [ [ 'h4', 0, 'h4.. one\n' ], + [ 'h4', 10, 'two' ] ], + 'h4 extended' + ); + t.end(); +}); + +test('notextile', t => { + t.deepEqual( + parse('notextile. one\n\np. two'), + [ [ 'b', 11, 'one\n' ], + [ 'p', 23, 'p. two' ], + [ 'b', 26, 'two' ] ], + 'notextile block' + ); + t.deepEqual( + parse('p.. one\n\nnotextile. middle\n\ntwo'), + [ [ 'p', 0, 'p.. one\n' ], + [ 'b', 20, 'middle\n' ], + [ 'p', 35, 'two' ] ], + 'notextile in between paragraphs' + ); + t.deepEqual( + parse('notextile.. one\n\ntwo'), + [ [ 'b', 12, 'one\n' ], + [ 'b', 24, 'two' ] ], + 'extended notextile block' + ); + t.end(); +}); + +test('pre', t => { + t.deepEqual( + parse('pre. one\n\npre. two'), + [ [ 'pre', 0, 'pre. one\n' ], + [ 'pre', 10, 'pre. two' ] ], + 'named pre' + ); + t.deepEqual( + parse('pre.. one\n\ntwo'), + [ [ 'pre', 0, 'pre.. one\n' ] ], + 'extended pre' + ); + t.end(); +}); + +test('HTML', t => { + t.deepEqual( + parse('
      \n
      \nfoo\n
      \n
      '), + [ [ 'div', 0, '
      \n' ], + [ 'div', 6, '
      \n' ] ], + 'blocks' + ); + t.deepEqual( + parse('
      \n\nfoo\n\n
      '), + [ [ 'div', 0, '
      \n' ], + [ 'ins', 6, '\n' ] ], + 'inlines' + ); + t.deepEqual( + parse('
      \n\nfoo\n\n
      '), + [ [ 'div', 0, '
      \n' ], + [ 'code', 6, '\n' ] ], + 'inline code' + ); + t.deepEqual( + parse('
      \n\nfoo\n\n
      '), + [ [ 'div', 0, '
      \n' ], + [ 'ins', 6, '\n' ], + [ 'b', 12, 'foo\n' ] ], + 'nested inlines' + ); + t.deepEqual( + parse('foo\n\n
      \n
      \nfoo\n
      \n
      '), + [ [ 'p', 0, 'foo\n' ], + [ 'div', 5, '
      \n' ], + [ 'div', 11, '
      \n' ] ], + 'prefixed blocks' + ); + t.deepEqual( + parse('foo\n\n
      \n
      \nfoo\n
      \n
      '), + [ [ 'p', 0, 'foo\n' ], + [ 'div', 5, '
      \n' ], + [ 'div', 11, '
      \n' ], + [ 'b', 17, 'foo\n' ] ], + 'prefixed nested inlines' + ); + t.deepEqual( + parse('foo bar\n\nbaz foo'), + [ [ 'p', 0, 'foo bar\n' ], + [ 'b', 4, ' bar\n' ], + [ 'p', 15, 'baz foo' ], + [ 'b', 19, ' foo' ] ], + 'inline singletons' + ); + t.deepEqual( + parse('
      \nfoo\n\nbar\n
      \nbaz'), + [ [ 'pre', 0, '
      \n' ],
      +      [ 'p', 22, 'baz' ] ],
      +    'pre block'
      +  );
      +  t.deepEqual(
      +    parse('\nbaz'),
      +    [ [ 'style', 0, '\nbaz'),
      -    [ [ 'style', 0, '\n' ],
      +      [ 'p', [ 26, 29 ], 'baz' ] ],
           'style block'
         );
         t.deepEqual(
           parse('\nbaz'),
      -    [ [ 'script', 0, '\n' ],
      +      [ 'p', [ 28, 31 ], 'baz' ] ],
           'script block'
         );
         t.deepEqual(
           parse('\nfoo\n\nbar\n\nbaz'),
      -    [ [ 'p', 34, 'baz' ] ],
      +    [ [ 'p', [ 34, 37 ], 'baz' ] ],
           'notextile block'
         );
         t.deepEqual(
           parse('
      \n\nfoo\n\n
      '), - [ [ 'div', 0, '
      \n' ], - [ 'b', 18, 'foo\n' ] ], + [ [ 'div', [ 0, 48 ], '
      \n\nfoo\n\n
      ' ], + [ 'b', [ 18, 28 ], 'foo' ] ], 'notextile inline' ); t.deepEqual( parse('
      \nfoo\n
      '), - [ [ 'div', 0, '
      \n' ], - [ 'code', 6, 'foo\n' ] ], + [ [ 'div', [ 0, 36 ], '
      \nfoo\n
      ' ], + [ 'code', [ 6, 29 ], 'foo' ] ], 'notextile inline' ); t.end(); @@ -312,24 +355,28 @@ test('HTML', t => { test('HTML comments', t => { t.deepEqual( parse('one\n\n\n\ntwo'), - [ [ 'p', 0, 'one\n' ], - [ 'p', 23, 'two' ] ], + [ [ 'p', [ 0, 5 ], 'one\n\n' ], + [ COMM, [ 5, 23 ], '\n\n' ], + [ 'p', [ 23, 26 ], 'two' ] ], 'block level comment' ); t.deepEqual( parse('\n\np. foo'), - [ [ 'p', 18, 'p. foo' ] ], + [ [ COMM, [ 0, 18 ], '\n\n' ], + [ 'p', [ 18, 24 ], 'p. foo' ] ], 'comment prefixes content' ); t.deepEqual( parse('p. one\n\n\n\np. two'), - [ [ 'p', 0, 'p. one\n' ], - [ 'p', 26, 'p. two' ] ], + [ [ 'p', [ 0, 8 ], 'p. one\n\n' ], + [ COMM, [ 8, 26 ], '\n\n' ], + [ 'p', [ 26, 32 ], 'p. two' ] ], 'comment in between paragraphs' ); t.deepEqual( parse('p. one two'), - [ [ 'p', 0, 'p. one two' ] ], + [ [ 'p', [ 0, 27 ], 'p. one two' ], + [ COMM, [ 7, 23 ], '' ] ], 'inline comment' ); t.end(); @@ -338,9 +385,9 @@ test('HTML comments', t => { test('ruler', t => { t.deepEqual( parse('one\n\n---\n\ntwo'), - [ [ 'p', 0, 'one\n' ], - [ 'hr', 5, '---\n' ], - [ 'p', 10, 'two' ] ], + [ [ 'p', [ 0, 5 ], 'one\n\n' ], + [ 'hr', [ 5, 10 ], '---\n\n' ], + [ 'p', [ 10, 13 ], 'two' ] ], 'hr' ); t.end(); @@ -349,38 +396,38 @@ test('ruler', t => { test('lists', t => { t.deepEqual( parse('* one\n** two\n* three'), - [ [ 'ul', 0, '* one\n' ], - [ 'li', 0, '* one\n' ], - [ 'ul', 6, '** two\n' ], - [ 'li', 6, '** two\n' ], - [ 'li', 13, '* three' ] ], + [ [ 'ul', [ 0, 6 ], '* one\n' ], + [ 'li', [ 0, 6 ], '* one\n' ], + [ 'ul', [ 6, 13 ], '** two\n' ], + [ 'li', [ 6, 13 ], '** two\n' ], + [ 'li', [ 13, 20 ], '* three' ] ], 'unordered' ); t.deepEqual( parse('# one\n## two\n# three'), - [ [ 'ol', 0, '# one\n' ], - [ 'li', 0, '# one\n' ], - [ 'ol', 6, '## two\n' ], - [ 'li', 6, '## two\n' ], - [ 'li', 13, '# three' ] ], + [ [ 'ol', [ 0, 6 ], '# one\n' ], + [ 'li', [ 0, 6 ], '# one\n' ], + [ 'ol', [ 6, 13 ], '## two\n' ], + [ 'li', [ 6, 13 ], '## two\n' ], + [ 'li', [ 13, 20 ], '# three' ] ], 'ordered' ); t.deepEqual( parse('# one\n** two\n# three'), - [ [ 'ol', 0, '# one\n' ], - [ 'li', 0, '# one\n' ], - [ 'ul', 6, '** two\n' ], - [ 'li', 6, '** two\n' ], - [ 'li', 13, '# three' ] ], + [ [ 'ol', [ 0, 6 ], '# one\n' ], + [ 'li', [ 0, 6 ], '# one\n' ], + [ 'ul', [ 6, 13 ], '** two\n' ], + [ 'li', [ 6, 13 ], '** two\n' ], + [ 'li', [ 13, 20 ], '# three' ] ], 'mixed' ); t.deepEqual( parse('# _one_\n* two'), - [ [ 'ol', 0, '# _one_\n' ], - [ 'li', 0, '# _one_\n' ], - [ 'em', 2, '_one_\n' ], - [ 'li', 8, '* two' ], - [ 'b', 10, 'two' ] ], + [ [ 'ol', [ 0, 8 ], '# _one_\n' ], + [ 'li', [ 0, 8 ], '# _one_\n' ], + [ 'em', [ 2, 7 ], '_one_' ], + [ 'li', [ 8, 20 ], '* two' ], + [ 'b', [ 10, 20 ], 'two' ] ], 'with phrase content' ); t.end(); @@ -394,19 +441,22 @@ test('definition lists', t => { - xyz - bar := def2 - baz := def3 -...*extended* =:`), - [ [ 'p', 0, 'prefix\n' ], - [ 'dl', 8, '- foo := def1\n' ], - [ 'dt', 8, '- foo := def1\n' ], - [ 'dd', 14, ':= def1\n' ], - [ 'dt', 22, '- xyz\n' ], - [ 'dt', 22, '- xyz\n' ], - [ 'dd', 34, ':= def2\n' ], - [ 'dt', 42, '- baz := def3\n' ], - [ 'dd', 48, ':= def3\n' ], - [ 'p', 51, 'def3\n' ], - [ 'br', 55, '\n' ], - [ 'strong', 59, '*extended* =:' ] ], +...*extended* =: + +postfix`), + [ [ 'p', [ 0, 8 ], 'prefix\n\n' ], + [ 'dl', [ 8, 74 ], '- foo := def1\n- xyz\n- bar := def2\n- baz := def3\n...*extended* =:\n\n' ], + [ 'dt', [ 8, 14 ], '- foo ' ], + [ 'dd', [ 14, 22 ], ':= def1\n' ], + [ 'dt', [ 22, 28 ], '- xyz\n' ], + [ 'dt', [ 28, 34 ], '- bar ' ], + [ 'dd', [ 34, 42 ], ':= def2\n' ], + [ 'dt', [ 42, 48 ], '- baz ' ], + [ 'dd', [ 48, 74 ], ':= def3\n...*extended* =:\n\n' ], + [ 'p', [ 51, 69 ], 'def3\n...*extended*' ], + [ 'br', [ 55, 56 ], '\n' ], + [ 'strong', [ 59, 69 ], '*extended*' ], + [ 'p', [ 74, 81 ], 'postfix' ] ], 'complex with content' ); t.end(); @@ -425,23 +475,23 @@ table(cls). summary | 1 | _2_ | suffix`), - [ [ 'p', 0, 'prefix\n' ], - [ 'table', 8, 'table(cls). summary\n' ], - [ 'thead', 28, '|^.\n' ], - [ 'tr', 32, '|_. a |_. b |\n' ], - [ 'th', 32, '|_. a |_. b |\n' ], - [ 'th', 38, '|_. b |\n' ], - [ 'ins', 42, 'b |\n' ], - [ 'tfoot', 57, '|~.\n' ], - [ 'tr', 61, '|\\2=. footer |\n' ], - [ 'td', 61, '|\\2=. footer |\n' ], - [ 'del', 67, 'footer |\n' ], - [ 'tbody', 87, '|-.\n' ], - [ 'tr', 91, '| 1 | _2_ |\n' ], - [ 'td', 91, '| 1 | _2_ |\n' ], - [ 'td', 95, '| _2_ |\n' ], - [ 'em', 97, '_2_ |\n' ], - [ 'p', 104, 'suffix' ] ], + [ [ 'p', [ 0, 8 ], 'prefix\n\n' ], + [ 'table', [ 8, 104 ], 'table(cls). summary\n|^.\n|_. a |_. b |\n|~.\n|\\2=. footer |\n|-.\n| 1 | _2_ |\n\n' ], + [ 'thead', [ 28, 57 ], '|^.\n|_. a |_. b |\n' ], + [ 'tr', [ 32, 57 ], '|_. a |_. b |\n' ], + [ 'th', [ 32, 38 ], '|_. a ' ], + [ 'th', [ 38, 55 ], '|_. b ' ], + [ 'ins', [ 42, 54 ], 'b' ], + [ 'tfoot', [ 57, 87 ], '|~.\n|\\2=. footer |\n' ], + [ 'tr', [ 61, 87 ], '|\\2=. footer |\n' ], + [ 'td', [ 61, 85 ], '|\\2=. footer ' ], + [ 'del', [ 67, 84 ], 'footer' ], + [ 'tbody', [ 87, 104 ], '|-.\n| 1 | _2_ |\n\n' ], + [ 'tr', [ 91, 103 ], '| 1 | _2_ |\n' ], + [ 'td', [ 91, 95 ], '| 1 ' ], + [ 'td', [ 95, 101 ], '| _2_ ' ], + [ 'em', [ 97, 100 ], '_2_' ], + [ 'p', [ 104, 110 ], 'suffix' ] ], 'complex with content' ); t.end(); @@ -450,79 +500,97 @@ suffix`), test('inline tags', t => { t.deepEqual( parse('one *two* three'), - [ [ 'p', 0, 'one *two* three' ], - [ 'strong', 4, '*two* three' ] ], + [ [ 'p', [ 0, 15 ], 'one *two* three' ], + [ 'strong', [ 4, 9 ], '*two*' ] ], 'strong' ); t.deepEqual( parse('one **two** three'), - [ [ 'p', 0, 'one **two** three' ], - [ 'b', 4, '**two** three' ] ], + [ [ 'p', [ 0, 17 ], 'one **two** three' ], + [ 'b', [ 4, 11 ], '**two**' ] ], 'b' ); t.deepEqual( parse('one _two_ three'), - [ [ 'p', 0, 'one _two_ three' ], - [ 'em', 4, '_two_ three' ] ], + [ [ 'p', [ 0, 15 ], 'one _two_ three' ], + [ 'em', [ 4, 9 ], '_two_' ] ], 'em' ); t.deepEqual( parse('one __two__ three'), - [ [ 'p', 0, 'one __two__ three' ], - [ 'i', 4, '__two__ three' ] ], + [ [ 'p', [ 0, 17 ], 'one __two__ three' ], + [ 'i', [ 4, 11 ], '__two__' ] ], 'i' ); t.deepEqual( parse('one -two- three'), - [ [ 'p', 0, 'one -two- three' ], - [ 'del', 4, '-two- three' ] ], + [ [ 'p', [ 0, 15 ], 'one -two- three' ], + [ 'del', [ 4, 9 ], '-two-' ] ], 'del' ); t.deepEqual( parse('one @two@ three'), - [ [ 'p', 0, 'one @two@ three' ], - [ 'code', 4, '@two@ three' ] ], + [ [ 'p', [ 0, 15 ], 'one @two@ three' ], + [ 'code', [ 4, 9 ], '@two@' ] ], 'code' ); t.deepEqual( parse('one ~two~ three'), - [ [ 'p', 0, 'one ~two~ three' ], - [ 'sub', 4, '~two~ three' ] ], + [ [ 'p', [ 0, 15 ], 'one ~two~ three' ], + [ 'sub', [ 4, 9 ], '~two~' ] ], 'sub' ); t.deepEqual( parse('one ^two^ three'), - [ [ 'p', 0, 'one ^two^ three' ], - [ 'sup', 4, '^two^ three' ] ], + [ [ 'p', [ 0, 15 ], 'one ^two^ three' ], + [ 'sup', [ 4, 9 ], '^two^' ] ], 'sup' ); t.deepEqual( parse('one %two% three'), - [ [ 'p', 0, 'one %two% three' ], - [ 'span', 4, '%two% three' ] ], + [ [ 'p', [ 0, 15 ], 'one %two% three' ], + [ 'span', [ 4, 9 ], '%two%' ] ], 'span' ); t.deepEqual( parse('one +two+ three'), - [ [ 'p', 0, 'one +two+ three' ], - [ 'ins', 4, '+two+ three' ] ], + [ [ 'p', [ 0, 15 ], 'one +two+ three' ], + [ 'ins', [ 4, 9 ], '+two+' ] ], 'ins' ); t.deepEqual( parse('one ??two?? three'), - [ [ 'p', 0, 'one ??two?? three' ], - [ 'cite', 4, '??two?? three' ] ], + [ [ 'p', [ 0, 17 ], 'one ??two?? three' ], + [ 'cite', [ 4, 11 ], '??two??' ] ], 'cite' ); + t.deepEqual( + parse('one [*two*] three'), + [ [ 'p', [ 0, 17 ], 'one [*two*] three' ], + [ 'strong', [ 4, 11 ], '[*two*]' ] ], + 'fenced strong' + ); + t.deepEqual( + parse('one [**two**] three'), + [ [ 'p', [ 0, 19 ], 'one [**two**] three' ], + [ 'b', [ 4, 13 ], '[**two**]' ] ], + 'fenced b' + ); + t.deepEqual( + parse('one [@two@] three'), + [ [ 'p', [ 0, 17 ], 'one [@two@] three' ], + [ 'code', [ 4, 11 ], '[@two@]' ] ], + 'fenced code' + ); t.end(); }); test('linebreak', t => { t.deepEqual( parse('one\ntwo\nthree'), - [ [ 'p', 0, 'one\n' ], - [ 'br', 3, '\n' ], - [ 'br', 7, '\n' ] ], + [ [ 'p', [ 0, 13 ], 'one\ntwo\nthree' ], + [ 'br', [ 3, 4 ], '\n' ], + [ 'br', [ 7, 8 ], '\n' ] ], 'breaks' ); t.end(); @@ -531,15 +599,15 @@ test('linebreak', t => { test('image', t => { t.deepEqual( parse('one !/carver.png! three'), - [ [ 'p', 0, 'one !/carver.png! three' ], - [ 'img', 4, '!/carver.png! three' ] ], + [ [ 'p', [ 0, 23 ], 'one !/carver.png! three' ], + [ 'img', [ 4, 17 ], '!/carver.png!' ] ], 'basic image' ); t.deepEqual( parse('one !/carver.png!:link three'), - [ [ 'p', 0, 'one !/carver.png!:link three' ], - [ 'a', 4, '!/carver.png!:link three' ], - [ 'img', 4, '!/carver.png!:link three' ] ], + [ [ 'p', [ 0, 28 ], 'one !/carver.png!:link three' ], + [ 'a', [ 4, 22 ], '!/carver.png!:link' ], + [ 'img', [ 4, 17 ], '!/carver.png!' ] ], 'image with link' ); t.end(); @@ -548,15 +616,15 @@ test('image', t => { test('abbreviations', t => { t.deepEqual( parse('one HTML two'), - [ [ 'p', 0, 'one HTML two' ], - [ 'span', 4, 'HTML two' ] ], + [ [ 'p', [ 0, 12 ], 'one HTML two' ], + [ 'span', [ 4, 8 ], 'HTML' ] ], 'smallcaps' ); t.deepEqual( parse('one HTML(def) two'), - [ [ 'p', 0, 'one HTML(def) two' ], - [ 'abbr', 4, 'HTML(def) two' ], - [ 'span', 4, 'HTML(def) two' ] ], + [ [ 'p', [ 0, 17 ], 'one HTML(def) two' ], + [ 'abbr', [ 4, 13 ], 'HTML(def)' ], + [ 'span', [ 4, 13 ], 'HTML(def)' ] ], 'acronym' ); t.end(); @@ -565,15 +633,15 @@ test('abbreviations', t => { test('link', t => { t.deepEqual( parse('one "foo":bar three'), - [ [ 'p', 0, 'one "foo":bar three' ], - [ 'a', 4, '"foo":bar three' ] ], + [ [ 'p', [ 0, 19 ], 'one "foo":bar three' ], + [ 'a', [ 4, 13 ], '"foo":bar' ] ], 'basic link' ); t.deepEqual( parse('foo "one _two_ three":url bar'), - [ [ 'p', 0, 'foo "one _two_ three":url bar' ], - [ 'a', 4, '"one _two_ three":url bar' ], - [ 'em', 9, '_two_ three":url bar' ] ], + [ [ 'p', [ 0, 29 ], 'foo "one _two_ three":url bar' ], + [ 'a', [ 4, 25 ], '"one _two_ three":url' ], + [ 'em', [ 9, 14 ], '_two_' ] ], 'basic link' ); t.end(); From f587e863d4f4115f6aa11db20a3bedebce4da492 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sun, 25 Apr 2021 19:47:41 +0000 Subject: [PATCH 15/35] Remove unused null offset from node pos. --- src/VDOM.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/VDOM.js b/src/VDOM.js index 1c55397..f89d30b 100644 --- a/src/VDOM.js +++ b/src/VDOM.js @@ -52,7 +52,7 @@ function appendTo (parent, child) { export class Node { constructor (tagName) { this.nodeType = NODE; - this.pos = { offset: null }; + this.pos = {}; } toHTML () { From 8371bc0628438221752e9481c92bd0098990681a Mon Sep 17 00:00:00 2001 From: Borgar Date: Mon, 26 Apr 2021 17:34:20 +0000 Subject: [PATCH 16/35] Conform footnote handling to PHP v4 Closes #74 --- README.textile | 7 ++++++- src/index.js | 4 +++- src/textile/block.js | 2 +- test/basic.js | 15 ++++++++++++++ test/jstextile.js | 47 +++++++++++++++++++++++++++++++++++++++++- test/source-offsets.js | 3 --- test/threshold.js | 2 +- 7 files changed, 72 insertions(+), 8 deletions(-) diff --git a/README.textile b/README.textile index 7f85852..bef3895 100644 --- a/README.textile +++ b/README.textile @@ -14,7 +14,12 @@ h2. Options The basic interface mimics "marked":https://github.com/chjj/marked, the popular markdown parser. So if you use that in your project then you can support Textile as well with minimal effort. -Currently, the only supported option is @breaks@ which can be used to enable/disable the default behavior of line-breaking single newlines within blocks. +The supported options are: + +* @breaks@ [default: [@true@]] +Used to enable/disable the default behavior of line-breaking single newlines within blocks. +* @autobacklink@ [default: [@false@]] +Turn this on to have footnotes automatically backlink to their references (otherwise enabled by syntax: @fn1^@). h2. Usage diff --git a/src/index.js b/src/index.js index 0a1cb32..cb79bda 100644 --- a/src/index.js +++ b/src/index.js @@ -57,7 +57,9 @@ export { CommentNode, Document, Element, ExtendedNode, HiddenNode, Node, RawNode // options textile.defaults = { // single-line linebreaks are converted to
      by default - breaks: true + breaks: true, + // automatically backlink footnotes, regardless of syntax + autobacklink: false }; textile.setOptions = opt => { diff --git a/src/textile/block.js b/src/textile/block.js index 6273eb4..30aef28 100644 --- a/src/textile/block.js +++ b/src/textile/block.js @@ -181,7 +181,7 @@ export function parseBlock (src, options) { let fnMark = new Element('sup', subAttr).setPos(outerOffs + 2, fnid.length); fnMark.appendChild(new TextNode(fnid)); // eslint-disable-next-line no-constant-condition - if (shouldBacklink || true) { // FIXME: need option to turn this on/off + if (shouldBacklink || options.autobacklink) { // FIXME: PHP sensibly adds an instance prefix to the IDs: fn2 => fn18281493636081906fec71d-2 const backlink = new Element('a', { href: '#fnr' + fnid, ...subAttr }) .setPos(outerOffs + 2, fnid.length + (shouldBacklink ? 1 : 0)); diff --git a/test/basic.js b/test/basic.js index bf32220..715cce1 100644 --- a/test/basic.js +++ b/test/basic.js @@ -324,9 +324,24 @@ test('footnote reference', t => { t.end(); }); +test('footnote reference with bang', t => { + const tx = 'This is covered elsewhere[1!].'; + t.is(textile.convert(tx), + '

      This is covered elsewhere1.

      ', tx); + t.end(); +}); + test('footnote', t => { const tx = 'fn1. Down here, in fact.'; + t.is(textile.convert(tx), + '

      1 Down here, in fact.

      ', tx); + t.end(); +}); + + +test('footnote with backlink', t => { + const tx = 'fn1^. Down here, in fact.'; t.is(textile.convert(tx), '

      1 Down here, in fact.

      ', tx); t.end(); diff --git a/test/jstextile.js b/test/jstextile.js index 1421fc2..11302d7 100644 --- a/test/jstextile.js +++ b/test/jstextile.js @@ -465,7 +465,7 @@ test('image parsing speed bug 2 (issue #40)', t => { test('parse inline textile in footnotes', t => { t.is(textile.convert('fn1. This is _emphasized_ *strong*'), - '

      1 This is emphasized strong

      ', + '

      1 This is emphasized strong

      ', 'footnote inline textile'); t.end(); }); @@ -689,3 +689,48 @@ test('less liberal lang attr #76', t => { '

      red.

      '); t.end(); }); + + +test('footnote handling #74', t => { + t.is( + textile.convert('fn1. one'), + '

      1 one

      ', + 'fn1. one' + ); + t.is( + textile.convert('fn1^. one'), + '

      1 one

      ', + 'fn1^. one' + ); + t.is( + textile.convert('fn1(foo). one'), + '

      1 one

      ', + 'fn1(foo). one' + ); + t.is( + textile.convert('fn1^(foo). one'), + '

      1 one

      ', + 'fn1^(foo). one' + ); + t.is( + textile.convert('fn1. one\n\ntwo'), + '

      1 one

      \n

      two

      ', + 'fn1. one\n\ntwo' + ); + t.is( + textile.convert('fn1.. one\n\ntwo'), + '

      1 one
      \n
      \ntwo

      ', + 'fn1.. one\n\ntwo' + ); + t.is( + textile.convert('fn1^(foo). one\n\ntwo'), + '

      1 one

      \n

      two

      ', + 'fn1^(foo). one\n\ntwo' + ); + t.is( + textile.convert('fn1^(foo).. one\n\ntwo'), + '

      1 one
      \n
      \ntwo

      ', + 'fn1^(foo).. one\n\ntwo' + ); + t.end(); +}); diff --git a/test/source-offsets.js b/test/source-offsets.js index 8000222..4a15e54 100644 --- a/test/source-offsets.js +++ b/test/source-offsets.js @@ -123,10 +123,8 @@ test('fn#', t => { t.deepEqual( parse('fn1. one\n\nfn2. two'), [ [ 'p', [ 0, 10 ], 'fn1. one\n\n' ], - [ 'a', [ 2, 3 ], '1' ], [ 'sup', [ 2, 3 ], '1' ], [ 'p', [ 10, 18 ], 'fn2. two' ], - [ 'a', [ 12, 13 ], '2' ], [ 'sup', [ 12, 13 ], '2' ] ], 'named footnote' ); @@ -134,7 +132,6 @@ test('fn#', t => { parse('fn1.. one\n\ntwo'), [ [ EXND, [ 0, 14 ], 'fn1.. one\n\ntwo' ], [ 'p', [ 0, 14 ], 'fn1.. one\n\ntwo' ], - [ 'a', [ 2, 3 ], '1' ], [ 'sup', [ 2, 3 ], '1' ], [ 'br', [ 9, 10 ], '\n' ], [ 'br', [ 10, 11 ], '\n' ] diff --git a/test/threshold.js b/test/threshold.js index 0c2f3a8..f4891ba 100644 --- a/test/threshold.js +++ b/test/threshold.js @@ -364,7 +364,7 @@ test('block quote citation', t => { test('footnotes', t => { const tx = `A footnote reference[1]. -fn1. The footnote.`; +fn1^. The footnote.`; t.is(textile.convert(tx), `

      A footnote reference1.

      1 The footnote.

      `, tx); From f38cc79059ec2ba46f813df2e6999c354880ae52 Mon Sep 17 00:00:00 2001 From: Borgar Date: Mon, 26 Apr 2021 22:07:28 +0000 Subject: [PATCH 17/35] Support MediaWiki style definition list syntax Closes #73 --- src/textile/block.js | 17 +++- src/textile/{deflist.js => deflistrc.js} | 4 +- src/textile/deflistwiki.js | 64 ++++++++++++ test/deflist-wiki-style.js | 119 +++++++++++++++++++++++ 4 files changed, 198 insertions(+), 6 deletions(-) rename src/textile/{deflist.js => deflistrc.js} (95%) create mode 100644 src/textile/deflistwiki.js create mode 100644 test/deflist-wiki-style.js diff --git a/src/textile/block.js b/src/textile/block.js index 30aef28..207d3cf 100644 --- a/src/textile/block.js +++ b/src/textile/block.js @@ -11,7 +11,8 @@ import { singletons, allowedFlowBlocktags } from '../constants.js'; import { parseInline } from './inline.js'; import { copyAttr, parseAttr } from './attr.js'; import { testList, parseList } from './list.js'; -import { testDefList, parseDefList } from './deflist.js'; +import { testDefListRC, parseDefListRC } from './deflistrc.js'; +import { testDefListWiki, parseDefListWiki } from './deflistwiki.js'; import { testTable, parseTable } from './table.js'; import { txblocks, txlisthd, txattr } from './re_ext.js'; @@ -333,10 +334,18 @@ export function parseBlock (src, options) { continue; } - // definition list - if ((m = testDefList(src))) { + // TX/Wiki definition list + if ((m = testDefListWiki(src))) { const len = m[0].length; - root.appendChild(parseDefList(src.sub(0, len), options)); + root.appendChild(parseDefListWiki(src.sub(0, len), options)); + src.advance(len); + continue; + } + + // RedCloth definition list + if ((m = testDefListRC(src))) { + const len = m[0].length; + root.appendChild(parseDefListRC(src.sub(0, len), options)); src.advance(len); continue; } diff --git a/src/textile/deflist.js b/src/textile/deflistrc.js similarity index 95% rename from src/textile/deflist.js rename to src/textile/deflistrc.js index e6b54e9..4b623f5 100644 --- a/src/textile/deflist.js +++ b/src/textile/deflistrc.js @@ -6,11 +6,11 @@ import { parseBlock } from './block.js'; const reDeflist = /^((?:- (?:[^\n]\n?)+?)+(:=)(?: *\n[^\0]+?=:(?:\n|$)|(?:[^\0]+?(?:$|\n(?=\n|- )))))+(?:\r?\n)*/; const reItem = /^((?:- (?:[^\n]\n?)+?)+)(:=)( *\n[^\0]+?=:\s*(?:\n|$)|(?:[^\0]+?(?:$|\n(?=\n|- )(?:\r?\n)*)))/; -export function testDefList (src) { +export function testDefListRC (src) { return reDeflist.exec(src); } -export function parseDefList (src, options) { +export function parseDefListRC (src, options) { const deflist = new Element('dl'); deflist.setPos(src.offset, src.length); deflist.appendChild(new TextNode('\n')); diff --git a/src/textile/deflistwiki.js b/src/textile/deflistwiki.js new file mode 100644 index 0000000..420b579 --- /dev/null +++ b/src/textile/deflistwiki.js @@ -0,0 +1,64 @@ +/* definitions list parser */ +import { Element, TextNode } from '../VDOM.js'; +import re from '../re.js'; +import { parseInline } from './inline.js'; +import { parseAttr } from './attr.js'; +import { txattr } from './re_ext.js'; +re.pattern.txattr = txattr; + +const reDeflistWiki = re.compile( + /^[;:](?:[:txattr:])?(\. ?| )[^\0]*?(?:\s*\n\r?\n|$)/ +); +const reItemWiki = re.compile( + /^([;:])([:txattr:])?(\. ?| )([^\0]*?)(?=\r?\n\r?\n|([;:](?:[:txattr:])?(\. ?|\s|$))|$)/ +); + +export function testDefListWiki (src) { + const m = reDeflistWiki.exec(src); + // console.log(m); + return m; +} + +const type = { + ';': 'dt', + ':': 'dd' +}; + +export function parseDefListWiki (src, options) { + let listAttrSet = false; + const deflist = new Element('dl'); + deflist.setPos(src.offset, src.length); + deflist.appendChild(new TextNode('\n')); + let m; + let index = 0; + while ((m = reItemWiki.exec(src))) { + const inner = src.sub(1, m[0].length - 1); + const elmType = type[m[1]]; + const [ step, attr ] = parseAttr(inner, elmType); + inner.advance(step); + if (/^\./.test(inner)) { + inner.advance(1); + } + if (/^\s*$/.test(inner)) { + if (!listAttrSet) { + deflist.setAttr(attr); + listAttrSet = true; + } + } + else { + let attrOnItem = true; + if (!index && !listAttrSet) { + deflist.setAttr(attr); + listAttrSet = true; + attrOnItem = false; + } + const item = new Element(elmType, attrOnItem ? attr : null); + item.setPos(src.offset, m[0].length); + item.appendChild(parseInline(inner.trim(), options)); + deflist.appendChild([ new TextNode('\t'), item, new TextNode('\n') ]); + } + index++; + src.advance(m[0]); + } + return deflist; +} diff --git a/test/deflist-wiki-style.js b/test/deflist-wiki-style.js new file mode 100644 index 0000000..d84841f --- /dev/null +++ b/test/deflist-wiki-style.js @@ -0,0 +1,119 @@ +import test from 'tape'; +import textile from '../src/index.js'; + +test('minimal case 1', t => { + const tx = '; a'; + t.is( + textile.convert(tx), + '
      \n\t
      a
      \n
      ', + tx + ); + t.end(); +}); + + +test('minimal case 2', t => { + const tx = ': b'; + t.is( + textile.convert(tx), + '
      \n\t
      b
      \n
      ', + tx + ); + t.end(); +}); + + +test('minimal case 3', t => { + const tx = '; a\n: b'; + t.is( + textile.convert(tx), + '
      \n\t
      a
      \n\t
      b
      \n
      ', + tx + ); + t.end(); +}); + +test('minimal case 3', t => { + const tx = `;(foo). a +g +d +:(bar) b +c`; + t.is( + textile.convert(tx), + `
      +\t
      a
      +g
      +d
      +\t
      b
      +c
      +
      `, + tx + ); + t.end(); +}); + + +test('classes 1', t => { + const tx = `;(first) Item 1 +;(second) Item 2`; + t.is( + textile.convert(tx), + `
      +\t
      Item 1
      +\t
      Item 2
      +
      `, + tx + ); + t.end(); +}); + + +test('classes 2', t => { + const tx = `; Item 1 +;(second) Item 2`; + t.is( + textile.convert(tx), + `
      +\t
      Item 1
      +\t
      Item 2
      +
      `, + tx + ); + t.end(); +}); + + +test('classes 3', t => { + const tx = `;(class#id). +;(first) Item 1 +; Item 2`; + t.is( + textile.convert(tx), + `
      +\t
      Item 1
      +\t
      Item 2
      +
      `, + tx + ); + t.end(); +}); + + +test('classes 4', t => { + const tx = `;(class#id). +;(first) Item 1 +;(foo#bar). +;(second) Item 2 +;(third) Item 3`; + t.is( + textile.convert(tx), + `
      +\t
      Item 1
      +\t
      Item 2
      +\t
      Item 3
      +
      `, + tx + ); + t.end(); +}); From 281286f41c82294681d2d2d500ee0b0e6a6ac984 Mon Sep 17 00:00:00 2001 From: Borgar Date: Mon, 3 May 2021 18:19:27 +0000 Subject: [PATCH 18/35] Add tests for def-lists source indexes --- test/source-offsets.js | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/test/source-offsets.js b/test/source-offsets.js index 4a15e54..e43bd5e 100644 --- a/test/source-offsets.js +++ b/test/source-offsets.js @@ -430,7 +430,38 @@ test('lists', t => { t.end(); }); -test('definition lists', t => { +test('mediawiki definition lists', t => { + t.deepEqual( + parse(`prefix + +; foo +: def1 +; xyz +; bar +: def2 +; baz +: def3 +...*extended* + +postfix`), + [ [ 'p', [ 0, 8 ], 'prefix\n\n' ], + [ 'dl', [ 8, 68 ], '; foo\n: def1\n; xyz\n; bar\n: def2\n; baz\n: def3\n...*extended*\n\n' ], + [ 'dt', [ 8, 14 ], '; foo\n' ], + [ 'dd', [ 14, 21 ], ': def1\n' ], + [ 'dt', [ 21, 27 ], '; xyz\n' ], + [ 'dt', [ 27, 33 ], '; bar\n' ], + [ 'dd', [ 33, 40 ], ': def2\n' ], + [ 'dt', [ 40, 46 ], '; baz\n' ], + [ 'dd', [ 46, 66 ], ': def3\n...*extended*' ], + [ 'br', [ 52, 53 ], '\n' ], + [ 'strong', [ 56, 66 ], '*extended*' ], + [ 'p', [ 68, 75 ], 'postfix' ] ], + 'complex with content' + ); + t.end(); +}); + +test('redcloth definition lists', t => { t.deepEqual( parse(`prefix From 2edd9f9d30affee44068778d3f452c793cb337f1 Mon Sep 17 00:00:00 2001 From: Borgar Date: Tue, 4 May 2021 20:54:59 +0000 Subject: [PATCH 19/35] translating offsets to lines needs to be done differently as source order is not ensured --- src/index.js | 28 +++++++++++++++++++++------- test/line-numbers.js | 26 +++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/index.js b/src/index.js index cb79bda..06b49f4 100644 --- a/src/index.js +++ b/src/index.js @@ -16,6 +16,25 @@ function parseTextile (tx, opt) { return root; } +const binSearch = (list, item) => { + let low = 0; + let high = list.length - 1; + while (low <= high) { + const mid = Math.floor((low + high) / 2); + const guess = list[mid]; + if (guess > item) { + high = mid - 1; + } + else if (guess < item) { + low = mid + 1; + } + else if (guess === item) { + return mid; + } + } + return low; +}; + function addLines (rootNode, sourceTx) { // find newlines const newlineIndexes = []; @@ -25,14 +44,9 @@ function addLines (rootNode, sourceTx) { pos = sourceTx.indexOf('\n', pos + 1); } // convert offsets to zero-based line numbers - let index = 0; rootNode.visit(d => { - const offset = d.pos.start; - if (offset !== null) { - while (newlineIndexes[index] < offset) { - index++; - } - d.pos.line = index; + if (d.pos.start != null) { + d.pos.line = binSearch(newlineIndexes, d.pos.start); } }); // return the rootNode diff --git a/test/line-numbers.js b/test/line-numbers.js index 3b98afe..8cf51c3 100644 --- a/test/line-numbers.js +++ b/test/line-numbers.js @@ -79,7 +79,7 @@ test('bc', t => { t.end(); }); -test('paragraph', t => { +test('notextile', t => { t.is( parse('one\n\nnotextile. two'), '

      one

      \ntwo' @@ -114,3 +114,27 @@ test('pre', t => { ); t.end(); }); + +test('paragraph', t => { + t.is( + parse('1\n\n2\n\n3\n\n4\n\n5\n\n6\n\n7\n\n8\n\n9\n\n10\n\n11\n\n12\n\n13\n\n14\n\n15\n\n16\n\n17'), + `

      1

      +

      2

      +

      3

      +

      4

      +

      5

      +

      6

      +

      7

      +

      8

      +

      9

      +

      10

      +

      11

      +

      12

      +

      13

      +

      14

      +

      15

      +

      16

      +

      17

      ` + ); + t.end(); +}); From 6b75fdad3cf52d54619bbd0bc0556647e51a1880 Mon Sep 17 00:00:00 2001 From: Borgar Date: Wed, 5 May 2021 09:46:54 +0000 Subject: [PATCH 20/35] Add support for endnotes This follows the PHP syntax output pretty much exactly. I am not a bit fan of the output but I don't see a reason to deviate from it. Closes #72 --- src/VDOM.js | 15 ++ src/re.js | 5 +- src/textile/block.js | 34 +++- src/textile/endnote.js | 243 +++++++++++++++++++++++++++ src/textile/inline.js | 9 + test/block_comments.js | 3 - test/endnotes.js | 367 +++++++++++++++++++++++++++++++++++++++++ test/source-offsets.js | 44 ++++- 8 files changed, 705 insertions(+), 15 deletions(-) create mode 100644 src/textile/endnote.js create mode 100644 test/endnotes.js diff --git a/src/VDOM.js b/src/VDOM.js index f89d30b..44919b9 100644 --- a/src/VDOM.js +++ b/src/VDOM.js @@ -196,6 +196,21 @@ export class Element extends Node { return appendTo(this, node); } + insertBefore (newNode, referenceNode) { + const index = !!referenceNode && this.children.indexOf(referenceNode); + const finalIndex = index < 0 || typeof index !== 'number' ? Infinity : index; + this.children.splice(finalIndex, 0, newNode); + return newNode; + } + + removeChild (oldNode) { + const index = !!oldNode && this.children.indexOf(oldNode); + if (index >= 0) { + this.children.splice(index, 1); + } + return oldNode; + } + get firstChild () { return this.children[0]; } diff --git a/src/re.js b/src/re.js index 5693c54..8a787cb 100644 --- a/src/re.js +++ b/src/re.js @@ -48,12 +48,13 @@ const re = { if (arguments.length === 1) { // no flags arg provided, use the RegExp one flags = (src.global ? 'g' : '') + (src.ignoreCase ? 'i' : '') + + (src.unicode ? 'u' : '') + (src.multiline ? 'm' : ''); } src = src.source; } // don't do the same thing twice - const ckey = src + (flags || ''); + const ckey = src + '//' + (flags || ''); if (ckey in _cache) { return _cache[ckey]; } @@ -68,7 +69,7 @@ const re = { rx = rx.replace(/([^\\])\./g, '$1[^\\0]'); } // clean flags and output new regexp - flags = (flags || '').replace(/[^gim]/g, ''); + flags = (flags || '').replace(/[^gimu]/g, ''); return (_cache[ckey] = new RegExp(rx, flags)); } diff --git a/src/textile/block.js b/src/textile/block.js index 207d3cf..641df18 100644 --- a/src/textile/block.js +++ b/src/textile/block.js @@ -14,6 +14,7 @@ import { testList, parseList } from './list.js'; import { testDefListRC, parseDefListRC } from './deflistrc.js'; import { testDefListWiki, parseDefListWiki } from './deflistwiki.js'; import { testTable, parseTable } from './table.js'; +import { testEndnote, parseEndnote, testNotelist, parseNotelist, renderNotelist } from './endnote.js'; import { txblocks, txlisthd, txattr } from './re_ext.js'; re.pattern.txblocks = txblocks; @@ -60,7 +61,7 @@ export function parseBlock (src, options) { const root = new Element('root'); let linkRefs; - let hasHidden = false; + let skipNextLineBreak = true; let m; if (!(src instanceof Ribbon)) { @@ -71,7 +72,9 @@ export function parseBlock (src, options) { while (src.valueOf()) { src.save(); - // link_ref -- this goes first because it shouldn't trigger a linebreak + // these go first because they shouldn't trigger a linebreak + + // link_ref if ((m = reLinkRef.exec(src))) { if (!linkRefs) { linkRefs = {}; @@ -81,13 +84,20 @@ export function parseBlock (src, options) { continue; } + // endnote definition + if ((m = testEndnote(src))) { + const len = m[0].length; + root.appendChild(parseEndnote(src.sub(0, len), options)); + src.advance(len); + continue; + } + // add linebreak - const isNotFirst = hasHidden - ? root.children.filter(d => !(d instanceof HiddenNode)).length - : root.children.length; - if (isNotFirst) { + if (!skipNextLineBreak) { root.appendChild(new TextNode('\n')); } + skipNextLineBreak = false; + // named block if ((m = reBlock.exec(src))) { @@ -156,11 +166,11 @@ export function parseBlock (src, options) { else if (blockType === '###') { // ignore the insides - hasHidden = true; parentNode.appendChild( new HiddenNode(inner.trimEndNewlines()) .setPos(outerOffs, blockLen) ); + skipNextLineBreak = true; } else if (blockType === 'pre') { @@ -358,6 +368,14 @@ export function parseBlock (src, options) { continue; } + // endnote list + if ((m = testNotelist(src))) { + const len = m[0].length; + root.appendChild(parseNotelist(src.sub(0, len), options)); + src.advance(len); + continue; + } + // paragraph m = reBlockNormal.exec(src); root.appendChild( @@ -381,5 +399,7 @@ export function parseBlock (src, options) { }); } + renderNotelist(root, options); + return root.children; } diff --git a/src/textile/endnote.js b/src/textile/endnote.js new file mode 100644 index 0000000..2a3fced --- /dev/null +++ b/src/textile/endnote.js @@ -0,0 +1,243 @@ +/* textile inline parser */ +import { Element, TextNode, HiddenNode } from '../VDOM.js'; +import re from '../re.js'; + +import { parseAttr } from './attr.js'; +import { parseInline } from './inline.js'; + +import { txattr } from './re_ext.js'; +re.pattern.txattr = txattr; + +export const symbols = '¤§µ¶†‡•∗∴◊♠♣♥♦|'; + +const reEndnoteDef = re.compile( + /^note#([^%<*!@#^([{.\s]+)([*!^]?)([:txattr:])\.?\s+(.*?)($|\r?\n(?:\s*\n|$)+)/ +); +const reEndnoteRef = re.compile( + /^\[([:txattr:])#([^\]!]+?)(!?)\]/ +); +const reNotelist = re.compile( + /^notelist([:txattr:])(:(?:\p{L}|\p{M}|\p{N}|\p{Pc}|[¤§µ¶†‡•∗∴◊♠♣♥♦|]))?([\^!]?)(\+?)\.?\s*?(?:$|\r?\n(?:\s*\n|$)+)/u +); + +function charCounter (start = 'a') { + // symbols are static + if (symbols.includes(start)) { + return () => start; + } + // numbers keep counting + else if (isFinite(start)) { + let i = +start; + return () => String(i++); + } + // alpha use base26 encoding + else if (/^[a-z]$/i.test(start)) { + const isLower = start === start.toLowerCase(); + const offset = 65; // 65 = 'A' + let i = start.toUpperCase().charCodeAt(0) - offset; + return () => { + let c = ''; + for (let n = i++; n >= 0; n = Math.floor(n / 26) - 1) { + c = String.fromCharCode(n % 26 + offset) + c; + } + return isLower ? c.toLowerCase() : c; + }; + } + // other chars just use charCode + n + let startCode = start.charCodeAt(0); + return () => String.fromCharCode(startCode++); +} + + +class EndNoteKeeper { + constructor () { + this.refCounter = 1; + this.noteCounter = 1; + this.byLabel = {}; + this.list = []; + } + + getNote (label) { + if (!this.byLabel[label]) { + this.byLabel[label] = { + id: `note-${this.noteCounter}`, + label: label, + index: this.noteCounter, + attr: {}, + title: [ new TextNode(`Undefined Note [#${this.noteCounter}].`) ], + refs: [], + links: '', + addRef: () => { + const note = this.getNote(label); + const ref = { + id: `noteref-${note.index}.${note.refs.length + 1}`, + label: note.label, + index: this.refCounter + }; + this.refCounter++; + note.refs.push(ref); + return ref; + } + }; + this.list.push(this.byLabel[label]); + this.noteCounter++; + } + return this.byLabel[label]; + } +} + +function getNotes (options) { + if (!options.endNotes) { + options.endNotes = new EndNoteKeeper(); + } + return options.endNotes; +} + +// note refs + +export function testEndnoteRef (src) { + return reEndnoteRef.exec(src); +} + +export function parseEndnoteRef (src, options) { + const srcSrt = src.offset; + const srcLen = src.length; + + src.advance(1); + const [ step, attr ] = parseAttr(src); + src.advance(step); + + const doLink = src.charAt(src.length - 2) !== '!'; + const label = String(src).slice(1, doLink ? -1 : -2); + + const endNotes = getNotes(options); + const note = endNotes.getNote(label); + note.pos = [ srcSrt, srcLen ]; + const ref = note.addRef(note); + + const endNote = new Element('sup', attr); + endNote.setPos(srcSrt, srcLen); + const txt = new Element('span', { id: ref.id }); + txt.setPos(srcSrt, srcLen); + txt.appendChild(new TextNode(note.index)); + if (doLink) { + const link = endNote.appendChild(new Element('a', { href: '#' + note.id })); + link.setPos(srcSrt, srcLen); + link.appendChild(txt); + } + else { + endNote.appendChild(txt); + } + return endNote; +} + +// note defs + +export function testEndnote (src) { + return reEndnoteDef.exec(src); +} + +export function parseEndnote (src, options) { + const endNotes = getNotes(options); + const head = /^note#([^%<*!@#^([{.\s]+)([*!^]?)/.exec(src); + const note = endNotes.getNote(head[1]); + note.links = head[2]; + note.pos = [ src.offset, src.length ]; + src.advance(head[0]); + const [ step, attr ] = parseAttr(src); + src.advance(step); + const m = /^\.?\s+/.exec(src); + if (m) { + src.advance(m[0]); + } + note.attr = attr; + note.title = parseInline(src.trim()); + return []; +} + +// note list + +export function testNotelist (src) { + // TODO: test please: is this any faster, really, than just running exec? + const t = reNotelist.test(src); + return t ? [ RegExp.lastMatch ] : null; +} + +export function parseNotelist (src, options) { + const notelist = new HiddenNode(); + notelist.isNotelist = true; + notelist.setPos(src.offset, src.length); + const [ , attrTx, char, mod, plus ] = reNotelist.exec(src); + const [ , attr ] = parseAttr(attrTx + '.'); + + notelist.props = { + attr: attr, + links: mod, + unrefs: !!plus, + char: (char || ':a').slice(1) + }; + return notelist; +} + +export function renderNotelist (root, options) { + const endNotes = options.endNotes; + if (!endNotes) { + // hidden node will keep representing the empty notelist + return; + } + + root.children.forEach(node => { + if (node.isNotelist) { + const { attr, links, unrefs, char } = node.props; + + const notesToRender = unrefs + ? endNotes.list + : endNotes.list.filter(note => note.refs.length); + + if (!notesToRender.length) { + return []; + } + + const list = new Element('ol', attr); + list.pos = node.pos; // copy source position + list.appendChild(new TextNode('\n')); + + notesToRender.forEach(note => { + const item = new Element('li', note.attr); + if (note.pos) { + item.setPos(note.pos[0], note.pos[1]); + } + + const nLinks = note.links || links; + const noteBacklinks = nLinks !== '!'; + const noteSingleRef = nLinks !== '^'; + + // add the refs + const refsList = noteSingleRef + ? note.refs + : note.refs.slice(0, 1); + + if (noteBacklinks && refsList.length) { + const counter = charCounter(char); + refsList.forEach((ref, i) => { + if (i) { + item.appendChild(new TextNode(' ')); + } + item.appendChild(new Element('sup')) + .appendChild(new Element('a', { href: '#' + ref.id })) + .appendChild(new TextNode(counter())); + }); + // space and note ID + item + .appendChild(new Element('span', { id: note.id })) + .appendChild(new TextNode(' ')); + } + item.appendChild(note.title); + list.appendChild([ new TextNode('\t'), item, new TextNode('\n') ]); + }); + + root.insertBefore(list, node); + root.removeChild(node); + } + }); +} diff --git a/src/textile/inline.js b/src/textile/inline.js index f70e61b..565f0b6 100644 --- a/src/textile/inline.js +++ b/src/textile/inline.js @@ -4,6 +4,7 @@ import re from '../re.js'; import { parseAttr } from './attr.js'; import { parseGlyph } from './glyph.js'; +import { testEndnoteRef, parseEndnoteRef } from './endnote.js'; import { parseHtml, parseHtmlAttr, tokenize, testComment, testOpenTag } from '../html.js'; import { singletons } from '../constants.js'; @@ -214,6 +215,14 @@ export function parseInline (src, options) { continue; } + // endnote + if ((m = testEndnoteRef(src))) { + const len = m[0].length; + root.appendChild(parseEndnoteRef(src.sub(0, len), options)); + src.advance(len); + continue; + } + // caps / abbr if ((m = reCaps.exec(src))) { const caps = new Element('span', { class: 'caps' }).setPos(src.offset, m[0].length); diff --git a/test/block_comments.js b/test/block_comments.js index 4a12e48..c3b1341 100644 --- a/test/block_comments.js +++ b/test/block_comments.js @@ -15,7 +15,6 @@ Goodbye. `; t.is(textile.convert(tx), `

      Hello

      -

      Goodbye.

      `, tx); t.end(); }); @@ -31,7 +30,6 @@ More text to follow. `; t.is(textile.convert(tx), `

      Some text here.

      -

      More text to follow.

      `, tx); t.end(); }); @@ -49,7 +47,6 @@ p. More text to follow. `; t.is(textile.convert(tx), `

      Some text here.

      -

      More text to follow.

      `, tx); t.end(); }); diff --git a/test/endnotes.js b/test/endnotes.js new file mode 100644 index 0000000..7b555a0 --- /dev/null +++ b/test/endnotes.js @@ -0,0 +1,367 @@ +import test from 'tape'; +import textile from '../src/index.js'; + +test('endnote refs can be adjacent to text', t => { + t.is(textile.convert('text[#note] text'), + '

      text1 text

      ', + 'postfixed note'); + t.is(textile.convert('text [#note]text'), + '

      text 1text

      ', + 'prefixed note'); + t.end(); +}); + +test('endnote refs can take attributes', t => { + t.is(textile.convert('text [(foo)#note] text'), + '

      text 1 text

      ', + 'classname'); + t.is(textile.convert('text [(foo#bar)#note] text'), + '

      text 1 text

      ', + 'classname and id'); + t.end(); +}); + +test('endnote refs accept no-backlink modifier', t => { + t.is(textile.convert('text [#note!] text'), + '

      text 1 text

      ', + 'simple case'); + t.is(textile.convert('text [(foo#bar)#note!] text'), + '

      text 1 text

      ', + 'case with attributes'); + t.end(); +}); + +// defs + +test('note definitions are not output', t => { + t.is(textile.convert('note#foo. text'), + '', + 'single note only'); + t.is(textile.convert('note#foo. text\n\nnote#bar. text'), + '', + 'two notes only'); + t.is(textile.convert('text\n\nnote#foo. text\n\ntext'), + '

      text

      \n

      text

      ', + 'embedded in paragraphs'); + t.end(); +}); + +// lists + +test('nodelist', t => { + t.is(textile.convert('note#foo. endnote\n\nnotelist.'), + '', + 'no active refs'); + + t.is(textile.convert('note#foo. endnote\n\nnotelist+.'), + `
        +\t
      1. endnote
      2. +
      `, + 'no active refs but forced all'); + + t.end(); +}); + +test('nodelist formatting', t => { + t.is(textile.convert('note#foo(cls2). endnote\n\nnotelist(cls1)+.'), + `
        +\t
      1. endnote
      2. +
      `, + 'classnames'); + + t.is(textile.convert('note#foo(#id2). endnote\n\nnotelist(#id1)+.'), + `
        +\t
      1. endnote
      2. +
      `, + 'ids'); + + t.is(textile.convert('note#foo{padding:2em;margin:2em;border-bottom:2px solid red}. endnote\n\nnotelist{padding:1em;margin:1em;border-bottom:1px solid gray}+.'), + `
        +\t
      1. endnote
      2. +
      `, + 'styles'); + + t.end(); +}); + +test('nodelist order', t => { + t.is(textile.convert(`text [#aa] +text [#aa] +text [#bb] + +note#aa(cls1). note1. + +note#cc. note2 + +notelist(cls2):a^+.`), + `

      text 1
      +text 1
      +text 2

      +
        +\t
      1. a note1.
      2. +\t
      3. a Undefined Note [#2].
      4. +\t
      5. note2
      6. +
      `, + 'undefined order 1'); + + t.is(textile.convert(`text [#bb] +text [#aa] +text [#aa] + +note#aa(cls1). note1. + +note#cc. note2 + +notelist(cls2):a^+.`), + `

      text 1
      +text 2
      +text 2

      +
        +\t
      1. a Undefined Note [#1].
      2. +\t
      3. a note1.
      4. +\t
      5. note2
      6. +
      `, + 'undefined order 2'); + + t.end(); +}); + +test('nodelist link settings', t => { + t.is(textile.convert('[#a] [#a] [#b] [#b] [#c] [#c] [#d] [#d]\n\n' + +'note#a!. A\n\n' + +'note#b^. B\n\n' + +'note#c*. C\n\n' + +'note#d. D\n\n' + +'notelist.'), + '

      1 ' + +'1 ' + +'2 ' + +'2 ' + +'3 ' + +'3 ' + +'4 ' + +'4

      \n' + +'
        \n' + +'\t
      1. A
      2. \n' + +'\t
      3. a B
      4. \n' + +'\t
      5. a b C
      6. \n' + +'\t
      7. a b D
      8. \n' + +'
      ', + 'normal with overrides'); + + t.is(textile.convert('[#a] [#a] [#b] [#b] [#c] [#c] [#d] [#d]\n\n' + +'note#a!. A\n\n' + +'note#b^. B\n\n' + +'note#c*. C\n\n' + +'note#d. D\n\n' + +'notelist!.'), + '

      1 ' + +'1 ' + +'2 ' + +'2 ' + +'3 ' + +'3 ' + +'4 ' + +'4

      \n' + +'
        \n' + +'\t
      1. A
      2. \n' + +'\t
      3. a B
      4. \n' + +'\t
      5. a b C
      6. \n' + +'\t
      7. D
      8. \n' + +'
      ', + 'no links! with overrides'); + + t.is(textile.convert('[#a] [#a] [#b] [#b] [#c] [#c] [#d] [#d]\n\n' + +'note#a!. A\n\n' + +'note#b^. B\n\n' + +'note#c*. C\n\n' + +'note#d. D\n\n' + +'notelist^.'), + '

      1 ' + +'1 ' + +'2 ' + +'2 ' + +'3 ' + +'3 ' + +'4 ' + +'4

      \n' + +'
        \n' + +'\t
      1. A
      2. \n' + +'\t
      3. a B
      4. \n' + +'\t
      5. a b C
      6. \n' + +'\t
      7. a D
      8. \n' + +'
      ', + 'one link^ with overrides'); + + t.end(); +}); + +test('nodelist link settings', t => { + t.is(textile.convert('[#a] [#a] [#a] [#a] [#a]\n\n' + +'notelist.'), + '

      1 ' + +'1 ' + +'1 ' + +'1 ' + +'1

      \n' + +'
        \n' + +'\t
      1. a ' + + 'b ' + + 'c ' + + 'd ' + + 'e' + + ' Undefined Note [#1].
      2. \n
      ', + 'notelist.'); + + t.is(textile.convert('[#a] [#a] [#a] [#a] [#a]\n\n' + +'notelist:b.'), + '

      1 ' + +'1 ' + +'1 ' + +'1 ' + +'1

      \n' + +'
        \n' + +'\t
      1. b ' + + 'c ' + + 'd ' + + 'e ' + + 'f' + + ' Undefined Note [#1].
      2. \n
      ', + 'notelist:b.'); + + t.is(textile.convert('[#a] [#a] [#a] [#a] [#a]\n\n' + +'notelist:¤.'), + '

      1 ' + +'1 ' + +'1 ' + +'1 ' + +'1

      \n' + +'
        \n' + +'\t
      1. ¤ ' + + '¤ ' + + '¤ ' + + '¤ ' + + '¤' + + ' Undefined Note [#1].
      2. \n
      ', + 'notelist:¤.'); + + t.is(textile.convert('[#a] [#a] [#a] [#a] [#a]\n\n' + +'notelist:1.'), + '

      1 ' + +'1 ' + +'1 ' + +'1 ' + +'1

      \n' + +'
        \n' + +'\t
      1. 1 ' + + '2 ' + + '3 ' + + '4 ' + + '5' + + ' Undefined Note [#1].
      2. \n
      ', + 'notelist:1.'); + + t.is(textile.convert('[#a] [#a] [#a] [#a] [#a]\n\n' + +'notelist:þ.'), + '

      1 ' + +'1 ' + +'1 ' + +'1 ' + +'1

      \n' + +'
        \n' + +'\t
      1. þ ' + + 'ÿ ' + + 'Ā ' + + 'ā ' + + 'Ă' + + ' Undefined Note [#1].
      2. \n
      ', + 'notelist:þ.'); + + t.is(textile.convert('[#a] [#a] [#a] [#a] [#a]\n\n' + +'notelist:8.'), + '

      1 ' + +'1 ' + +'1 ' + +'1 ' + +'1

      \n' + +'
        \n' + +'\t
      1. 8 ' + + '9 ' + + '10 ' + + '11 ' + + '12' + + ' Undefined Note [#1].
      2. \n
      ', + 'notelist:8.'); + +/* + t.is(textile.convert('[#a] [#a] [#a] [#a] [#a]\n\n' + +'notelist:x.'), + '

      1 ' + +'1 ' + +'1 ' + +'1 ' + +'1

      \n' + +'
        \n' + +'\t
      1. x ' + + 'y ' + + 'z ' + + 'aa ' + + 'ab' + + ' Undefined Note [#1].
      2. \n
      ', + 'notelist:x.'); +*/ +/* +x => x y z aa ab +8 => 8 9 10 11 12 +*/ + + t.end(); +}); + + + +/* +test('links:1', t => { + const tx = ` +Scientists say[#lavader] the moon is quite small. But I, for one, don't believe them. Others claim it to be made of cheese[#aardman]. If this proves true I suspect we are in for troubled times[#apollo13] as people argue over their "share" of the moon's cheese. In the end, its limited size[#lavader] may prove problematic. + +note#lavader(noteclass). "Proof of the small moon hypothesis":http://antwrp.gsfc.nasa.gov/apod/ap080801.html. Copyright(c) Laurent Laveder + +note#aardman(#noteid). "Proof of a cheese moon":http://www.imdb.com/title/tt0104361 + +note#apollo13. After all, things do go "wrong":http://en.wikipedia.org/wiki/Apollo_13#The_oxygen_tank_incident. + +notelist{padding:1em;margin:1em;border-bottom:1px solid gray}. + +notelist{padding:1em;margin:1em;border-bottom:1px solid gray}:§^. + +notelist{padding:1em;margin:1em;border-bottom:1px solid gray}:‡. + +notelist!. +`; + t.is(textile.convert(tx), + `

      Scientists say1 the moon is quite small. But I, for one, don’t believe them. Others claim it to be made of cheese2. If this proves true I suspect we are in for troubled times3 as people argue over their “share” of the moon’s cheese. In the end, its limited size1 may prove problematic.

      +
        +\t
      1. a b Proof of the small moon hypothesis. Copyright© Laurent Laveder
      2. +\t
      3. a Proof of a cheese moon
      4. +\t
      5. a After all, things do go wrong.
      6. +
      +
        +\t
      1. § Proof of the small moon hypothesis. Copyright© Laurent Laveder
      2. +\t
      3. § Proof of a cheese moon
      4. +\t
      5. § After all, things do go wrong.
      6. +
      +
        +\t
      1. Proof of the small moon hypothesis. Copyright© Laurent Laveder
      2. +\t
      3. Proof of a cheese moon
      4. +\t
      5. After all, things do go wrong.
      6. +
      +
        +\t
      1. Proof of the small moon hypothesis. Copyright© Laurent Laveder
      2. +\t
      3. Proof of a cheese moon
      4. +\t
      5. After all, things do go wrong.
      6. +
      +`, tx); + t.end(); +}); +*/ diff --git a/test/source-offsets.js b/test/source-offsets.js index e43bd5e..e7c8dfc 100644 --- a/test/source-offsets.js +++ b/test/source-offsets.js @@ -20,8 +20,8 @@ function parse (tx) { } struct.push([ tagName, - [ start, end ], - tx.slice(start, end) + [ start == null ? null : start, end == null ? null : end ], + (start == null || end == null) ? null : tx.slice(start, end) ]); } }); @@ -670,7 +670,45 @@ test('link', t => { [ [ 'p', [ 0, 29 ], 'foo "one _two_ three":url bar' ], [ 'a', [ 4, 25 ], '"one _two_ three":url' ], [ 'em', [ 9, 14 ], '_two_' ] ], - 'basic link' + 'basic link with nested content' + ); + t.end(); +}); + +test('endnotes', t => { + t.deepEqual( + parse('[#a] [#b]\n\nnote#a. foo\n\nnotelist.'), + [ [ 'p', [ 0, 11 ], '[#a] [#b]\n\n' ], + [ 'sup', [ 0, 4 ], '[#a]' ], + [ 'a', [ 0, 4 ], '[#a]' ], + [ 'span', [ 0, 4 ], '[#a]' ], + [ 'sup', [ 5, 9 ], '[#b]' ], + [ 'a', [ 5, 9 ], '[#b]' ], + [ 'span', [ 5, 9 ], '[#b]' ], + [ 'ol', [ 24, 33 ], 'notelist.' ], + [ 'li', [ 11, 24 ], 'note#a. foo\n\n' ], + [ 'sup', [ null, null ], null ], + [ 'a', [ null, null ], null ], + [ 'span', [ null, null ], null ], + [ 'li', [ 5, 9 ], '[#b]' ], + [ 'sup', [ null, null ], null ], + [ 'a', [ null, null ], null ], + [ 'span', [ null, null ], null ] ], + 'basic endnotes' + ); + t.deepEqual( + parse('[#a]\n\nnote#a. foo\n\nnote#b. bar\n\nnotelist+.'), + [ [ 'p', [ 0, 6 ], '[#a]\n\n' ], + [ 'sup', [ 0, 4 ], '[#a]' ], + [ 'a', [ 0, 4 ], '[#a]' ], + [ 'span', [ 0, 4 ], '[#a]' ], + [ 'ol', [ 32, 42 ], 'notelist+.' ], + [ 'li', [ 6, 19 ], 'note#a. foo\n\n' ], + [ 'sup', [ null, null ], null ], + [ 'a', [ null, null ], null ], + [ 'span', [ null, null ], null ], + [ 'li', [ 19, 32 ], 'note#b. bar\n\n' ] ], + 'basic endnotes' ); t.end(); }); From 2434a1b3fe6c5e54ba6c043a886ffcf6a7dd7708 Mon Sep 17 00:00:00 2001 From: Borgar Date: Wed, 5 May 2021 09:49:26 +0000 Subject: [PATCH 21/35] Simpler code --- src/textile/attr.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/textile/attr.js b/src/textile/attr.js index d306ec2..179d29d 100644 --- a/src/textile/attr.js +++ b/src/textile/attr.js @@ -76,9 +76,11 @@ export function parseAttr (input, element, endToken) { do { if ((m = reStyles.exec(remaining))) { - m[1].split(';').forEach(function (p) { + m[1].split(';').forEach(p => { const d = p.match(reCSS); - if (d) { st[d[1]] = d[2]; } + if (d) { + st[d[1]] = d[2]; + } }); remaining = remaining.slice(m[0].length); continue; From 871382a33798a7ef47d75c9dc6b000b5748b804c Mon Sep 17 00:00:00 2001 From: Borgar Date: Wed, 5 May 2021 20:18:30 +0000 Subject: [PATCH 22/35] Disallow emitting link URI that have unsafe protocols Closes #42 --- src/index.js | 4 +++- src/textile/block.js | 7 ++++--- src/textile/inline.js | 18 ++++++++++++------ src/textile/safeHref.js | 11 +++++++++++ test/images.js | 8 ++++++++ test/links.js | 23 +++++++++++++++++++++++ 6 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 src/textile/safeHref.js diff --git a/src/index.js b/src/index.js index 06b49f4..0151493 100644 --- a/src/index.js +++ b/src/index.js @@ -73,7 +73,9 @@ textile.defaults = { // single-line linebreaks are converted to
      by default breaks: true, // automatically backlink footnotes, regardless of syntax - autobacklink: false + auto_backlink: false, + // list of blocked href protocols + blocked_uri: [ 'javascript', 'vbscript', 'data' ] }; textile.setOptions = opt => { diff --git a/src/textile/block.js b/src/textile/block.js index 641df18..4700bc1 100644 --- a/src/textile/block.js +++ b/src/textile/block.js @@ -8,6 +8,7 @@ import re from '../re.js'; import { parseHtml, tokenize, parseHtmlAttr, testComment, testOpenTagBlock } from '../html.js'; import { singletons, allowedFlowBlocktags } from '../constants.js'; +import { safeHref } from './safeHref.js'; import { parseInline } from './inline.js'; import { copyAttr, parseAttr } from './attr.js'; import { testList, parseList } from './list.js'; @@ -28,7 +29,7 @@ const reBlockNormalPre = re.compile(/^(.*?)($|\r?\n(?:\s*\n|$)+)/, 's'); const reBlockExtendedPre = re.compile(/^(.*?)($|\r?\n+(?=[:txblocks:][:txattr:]\.))/, 's'); const reRuler = /^(---+|\*\*\*+|___+)(\r?\n\s+|$)/; -const reLinkRef = re.compile(/^\[([^\]]+)\]((?:https?:\/\/|\/)\S+)(?:\s*\n|$)/); +const reLinkRef = /^\[([^\]]+)\]((?:([a-zA-Z]+):|\/)\S+)(?:\s*\n|$)/; const reFootnoteDef = /^fn(\d+)(\^?)$/; const getBlockRe = (blockType, isExtended) => { @@ -192,7 +193,7 @@ export function parseBlock (src, options) { let fnMark = new Element('sup', subAttr).setPos(outerOffs + 2, fnid.length); fnMark.appendChild(new TextNode(fnid)); // eslint-disable-next-line no-constant-condition - if (shouldBacklink || options.autobacklink) { + if (shouldBacklink || options.auto_backlink) { // FIXME: PHP sensibly adds an instance prefix to the IDs: fn2 => fn18281493636081906fec71d-2 const backlink = new Element('a', { href: '#fnr' + fnid, ...subAttr }) .setPos(outerOffs + 2, fnid.length + (shouldBacklink ? 1 : 0)); @@ -393,7 +394,7 @@ export function parseBlock (src, options) { if (node.tagName === 'a') { const href = node.getAttribute('href'); if (href && linkRefs[href]) { - node.setAttribute('href', linkRefs[href]); + node.setAttribute('href', safeHref(linkRefs[href], options)); } } }); diff --git a/src/textile/inline.js b/src/textile/inline.js index 565f0b6..8aa675f 100644 --- a/src/textile/inline.js +++ b/src/textile/inline.js @@ -4,6 +4,7 @@ import re from '../re.js'; import { parseAttr } from './attr.js'; import { parseGlyph } from './glyph.js'; +import { safeHref } from './safeHref.js'; import { testEndnoteRef, parseEndnoteRef } from './endnote.js'; import { parseHtml, parseHtmlAttr, tokenize, testComment, testOpenTag } from '../html.js'; import { singletons } from '../constants.js'; @@ -128,14 +129,19 @@ export function parseInline (src, options) { // image if ((m = reImage.exec(src)) || (m = reImageFenced.exec(src))) { const attr = parseAttr(m[1] || '', 'img')[1]; - attr.src = m[2]; - attr.alt = m[3] ? (attr.title = m[3]) : ''; + attr.src = safeHref(m[2], options, 'image'); + if (m[3]) { + attr.title = m[3]; + attr.alt = m[3]; + } + else { + attr.alt = ''; + } const startPos = src.offset; const length = m[0].length; - if (m[4]) { // +cite causes image to be wraped with a link (or link_ref)? - // TODO: support link_ref for image cite + if (m[4]) { // +cite causes image to be wraped with a link root - .appendChild(new Element('a', { href: m[4] }).setPos(startPos, length)) + .appendChild(new Element('a', { href: safeHref(m[4], options) }).setPos(startPos, length)) .appendChild(new Element('img', attr).setPos(startPos, length - m[4].length - 1)); } else { @@ -253,7 +259,7 @@ export function parseInline (src, options) { inner.advance(step); link.setAttr(attr); } - link.setAttribute('href', m[2]); + link.setAttribute('href', safeHref(m[2], options)); if (title && !inner.length) { inner = src.sub((isFenced ? 2 : 1) + step, m[1].length - step); } diff --git a/src/textile/safeHref.js b/src/textile/safeHref.js new file mode 100644 index 0000000..0874809 --- /dev/null +++ b/src/textile/safeHref.js @@ -0,0 +1,11 @@ +export function safeHref (url, options, type = 'link') { + const blacklist = options.blocked_uri; + if (Array.isArray(blacklist)) { + for (let i = 0; i < blacklist.length; i++) { + if (url.startsWith(blacklist[i] + ':')) { + return ''; + } + } + } + return url; +} diff --git a/test/images.js b/test/images.js index c5fb519..f86586f 100644 --- a/test/images.js +++ b/test/images.js @@ -592,3 +592,11 @@ test('with link and title and text afterward', t => { '

      description text.

      ', tx); t.end(); }); + + +test('image cite uses link ref', t => { + const tx = 'text !/image.jpg!:foo text.\n\n[foo]https://example.com/'; + t.is(textile.convert(tx), + '

      text text.

      ', tx); + t.end(); +}); diff --git a/test/links.js b/test/links.js index 5248e4e..cf45fbd 100644 --- a/test/links.js +++ b/test/links.js @@ -643,3 +643,26 @@ test('containing HTML tags with quotes', t => { t.end(); }); +test('xss attack 1', t => { + const tx = '"link":javascript:alert(\'XSS\')'; + t.is(textile.convert(tx), '

      link

      ', tx); + t.end(); +}); + +test('xss attack 2', t => { + const tx = '"link":foo\n\n[foo]javascript:alert(\'XSS\')'; + t.is(textile.convert(tx), '

      link

      ', tx); + t.end(); +}); + +test('xss attack 3', t => { + const tx = '[!/image.jpg!:javascript:alert(\'XSS\')]'; + t.is(textile.convert(tx), '

      ', tx); + t.end(); +}); + +test('xss attack 4', t => { + const tx = '[!/image.jpg!:foo]\n\n[foo]javascript:alert(\'XSS\')'; + t.is(textile.convert(tx), '

      ', tx); + t.end(); +}); From 01b5c2f95589335bd0aba24a40f11f94dcdcf8c2 Mon Sep 17 00:00:00 2001 From: Borgar Date: Fri, 7 May 2021 17:35:52 +0000 Subject: [PATCH 23/35] HTML is processed same as regular textile --- src/constants.js | 17 ----------------- src/html.js | 8 +++++--- src/index.js | 22 +++++++++++++++++++++- src/textile/block.js | 36 +++++++++++++++++++++--------------- src/textile/inline.js | 17 ++++------------- src/textile/safeHref.js | 4 ++-- test/links.js | 6 ++++++ 7 files changed, 59 insertions(+), 51 deletions(-) diff --git a/src/constants.js b/src/constants.js index 64b1e58..e3180ea 100644 --- a/src/constants.js +++ b/src/constants.js @@ -13,20 +13,3 @@ export const singletons = { param: 1, wbr: 1 }; - -// HTML tags allowed in the document (root) level that trigger HTML parsing -export const allowedFlowBlocktags = { - p: 0, - hr: 0, - ul: 1, - ol: 0, - li: 0, - div: 1, - pre: 0, - object: 1, - script: 0, - noscript: 0, - blockquote: 1, - notextile: 1, - style: 0 -}; diff --git a/src/html.js b/src/html.js index f263f2b..87add82 100644 --- a/src/html.js +++ b/src/html.js @@ -1,5 +1,5 @@ import re from './re.js'; -import { Element, TextNode, CommentNode } from './VDOM.js'; +import { Element, TextNode, CommentNode, RawNode } from './VDOM.js'; import { singletons } from './constants.js'; re.pattern.html_id = '[a-zA-Z][a-zA-Z\\d:]*'; @@ -150,7 +150,7 @@ export function tokenize (src, whitelistTags, lazy) { // This "indesciminately" parses HTML text into a list of JSON-ML element // No steps are taken however to prevent things like

      , // a user can still create nonsensical but "well-formed" markup -export function parseHtml (tokens, lazy) { +export function parseHtml (tokens, lazy, rawTextOnly = false) { const root = new Element('root'); const stack = []; let curr = root; @@ -163,7 +163,9 @@ export function parseHtml (tokens, lazy) { curr.appendChild(node); } else if (token.type === TEXT) { - const node = new TextNode(token.data); + // if a PRE, CODE, or SCRIPT exists as a parent, use Raw text to prevent glyph convertions + const isRawText = rawTextOnly || stack.some(d => /^(pre|code|script)$/i.test(d.tagName)); + const node = isRawText ? new RawNode(token.data) : new TextNode(token.data); node.html = true; curr.appendChild(node); } diff --git a/src/index.js b/src/index.js index 0151493..674d05b 100644 --- a/src/index.js +++ b/src/index.js @@ -75,7 +75,27 @@ textile.defaults = { // automatically backlink footnotes, regardless of syntax auto_backlink: false, // list of blocked href protocols - blocked_uri: [ 'javascript', 'vbscript', 'data' ] + blocked_uri: [ + 'javascript', + 'vbscript', + 'data' + ], + // HTML tags allowed in the document (root) level that trigger HTML parsing + allowed_block_tags: [ + 'blockquote', + 'div', + 'hr', + 'li', + 'noscript', + 'notextile', + 'object', + 'ol', + 'p', + 'pre', + 'script', + 'style', + 'ul' + ] }; textile.setOptions = opt => { diff --git a/src/textile/block.js b/src/textile/block.js index 4700bc1..9533e1d 100644 --- a/src/textile/block.js +++ b/src/textile/block.js @@ -6,10 +6,11 @@ import { Element, TextNode, RawNode, HiddenNode, CommentNode, ExtendedNode } fro import re from '../re.js'; import { parseHtml, tokenize, parseHtmlAttr, testComment, testOpenTagBlock } from '../html.js'; -import { singletons, allowedFlowBlocktags } from '../constants.js'; +import { singletons } from '../constants.js'; import { safeHref } from './safeHref.js'; import { parseInline } from './inline.js'; +import { parseGlyph } from './glyph.js'; import { copyAttr, parseAttr } from './attr.js'; import { testList, parseList } from './list.js'; import { testDefListRC, parseDefListRC } from './deflistrc.js'; @@ -61,7 +62,7 @@ function splitParagraphs (src, { tag = 'p', attr = {}, linebreak = '\n', options export function parseBlock (src, options) { const root = new Element('root'); - let linkRefs; + const linkRefs = {}; let skipNextLineBreak = true; let m; @@ -77,9 +78,6 @@ export function parseBlock (src, options) { // link_ref if ((m = reLinkRef.exec(src))) { - if (!linkRefs) { - linkRefs = {}; - } src.advance(m[0]); linkRefs[m[1]] = m[2]; continue; @@ -162,7 +160,9 @@ export function parseBlock (src, options) { } else if (blockType === 'notextile') { - parentNode.appendChild(parseHtml(tokenize(inner.trimEndNewlines()))); + parentNode.appendChild( + parseHtml(tokenize(inner.trimEndNewlines()), null, true) + ); } else if (blockType === '###') { @@ -240,7 +240,7 @@ export function parseBlock (src, options) { const tagName = m[1]; // Is block tag? ... - if (tagName in allowedFlowBlocktags) { + if (options.allowed_block_tags && options.allowed_block_tags.includes(tagName)) { if (m[3] || tagName in singletons) { // single? src.advance(m[0]); if (/^\s*(\n|$)/.test(src)) { @@ -388,17 +388,23 @@ export function parseBlock (src, options) { src.advance(m[0]); } - // apply link refs to anchor tags - if (linkRefs) { - root.visit(node => { - if (node.tagName === 'a') { - const href = node.getAttribute('href'); + root.visit(node => { + if (node.tagName === 'a') { + let href = node.getAttribute('href'); + if (href) { + // apply link refs to anchor tags if (href && linkRefs[href]) { - node.setAttribute('href', safeHref(linkRefs[href], options)); + href = linkRefs[href]; } + // ensure safe URL in href + node.setAttribute('href', safeHref(href, options)); } - }); - } + } + // convert certain glyphs in text nodes + if (node instanceof TextNode) { + node.data = parseGlyph(node.data); + } + }); renderNotelist(root, options); diff --git a/src/textile/inline.js b/src/textile/inline.js index 8aa675f..795be7c 100644 --- a/src/textile/inline.js +++ b/src/textile/inline.js @@ -3,8 +3,6 @@ import { Element, TextNode, RawNode, CommentNode } from '../VDOM.js'; import re from '../re.js'; import { parseAttr } from './attr.js'; -import { parseGlyph } from './glyph.js'; -import { safeHref } from './safeHref.js'; import { testEndnoteRef, parseEndnoteRef } from './endnote.js'; import { parseHtml, parseHtmlAttr, tokenize, testComment, testOpenTag } from '../html.js'; import { singletons } from '../constants.js'; @@ -129,7 +127,7 @@ export function parseInline (src, options) { // image if ((m = reImage.exec(src)) || (m = reImageFenced.exec(src))) { const attr = parseAttr(m[1] || '', 'img')[1]; - attr.src = safeHref(m[2], options, 'image'); + attr.src = m[2]; if (m[3]) { attr.title = m[3]; attr.alt = m[3]; @@ -141,7 +139,7 @@ export function parseInline (src, options) { const length = m[0].length; if (m[4]) { // +cite causes image to be wraped with a link root - .appendChild(new Element('a', { href: safeHref(m[4], options) }).setPos(startPos, length)) + .appendChild(new Element('a', { href: m[4] }).setPos(startPos, length)) .appendChild(new Element('img', attr).setPos(startPos, length - m[4].length - 1)); } else { @@ -189,7 +187,7 @@ export function parseInline (src, options) { else if (tag === 'notextile') { // HTML is still parsed, even though textile is not const inner = src.sub(0, m2[1].length); - child = parseHtml(tokenize(inner)); + child = parseHtml(tokenize(inner), null, true); } else { const inner = src.sub(0, m2[1].length); @@ -259,7 +257,7 @@ export function parseInline (src, options) { inner.advance(step); link.setAttr(attr); } - link.setAttribute('href', safeHref(m[2], options)); + link.setAttribute('href', m[2]); if (title && !inner.length) { inner = src.sub((isFenced ? 2 : 1) + step, m[1].length - step); } @@ -289,12 +287,5 @@ export function parseInline (src, options) { } while (src.valueOf()); - // FIXME: might be better to post process the entire tree as a last step? - // convert certain glyphs in text nodes - root.children.forEach(node => { - if (node instanceof TextNode) { - node.data = parseGlyph(node.data); - } - }); return root.children; } diff --git a/src/textile/safeHref.js b/src/textile/safeHref.js index 0874809..9b50ce0 100644 --- a/src/textile/safeHref.js +++ b/src/textile/safeHref.js @@ -1,6 +1,6 @@ -export function safeHref (url, options, type = 'link') { +export function safeHref (url, options) { const blacklist = options.blocked_uri; - if (Array.isArray(blacklist)) { + if (url && Array.isArray(blacklist)) { for (let i = 0; i < blacklist.length; i++) { if (url.startsWith(blacklist[i] + ':')) { return ''; diff --git a/test/links.js b/test/links.js index cf45fbd..fa3052d 100644 --- a/test/links.js +++ b/test/links.js @@ -666,3 +666,9 @@ test('xss attack 4', t => { t.is(textile.convert(tx), '

      ', tx); t.end(); }); + +test('xss attack 5', t => { + const tx = 'link'; + t.is(textile.convert(tx), '

      link

      ', tx); + t.end(); +}); From 42843f794a8a21203360454b340fc1e35dcaf12e Mon Sep 17 00:00:00 2001 From: Borgar Date: Fri, 7 May 2021 18:47:03 +0000 Subject: [PATCH 24/35] Support ID prefixing Closes #77 --- src/index.js | 33 +++++++++++++++++++++++++-------- src/textile/block.js | 5 ++--- src/textile/endnote.js | 9 +++++---- src/textile/inline.js | 6 ++++-- test/basic.js | 8 ++++---- test/id-prefix.js | 31 +++++++++++++++++++++++++++++++ test/jstextile.js | 21 +++++++++++---------- test/threshold.js | 6 +++--- 8 files changed, 85 insertions(+), 34 deletions(-) create mode 100644 test/id-prefix.js diff --git a/src/index.js b/src/index.js index 674d05b..87683bc 100644 --- a/src/index.js +++ b/src/index.js @@ -8,11 +8,11 @@ import { parseBlock } from './textile/block.js'; import { CommentNode, Document, Element, ExtendedNode, HiddenNode, Node, RawNode, TextNode } from './VDOM.js'; -function parseTextile (tx, opt) { +function parseTextile (tx, options) { const root = new Document(); root.pos.start = 0; root.pos.end = tx.length; - root.appendChild(parseBlock(tx, opt)); + root.appendChild(parseBlock(tx, options)); return root; } @@ -53,9 +53,20 @@ function addLines (rootNode, sourceTx) { return rootNode; } -export default function textile (sourceTx, opt) { +function getOptions (options) { + const opts = Object.assign({}, textile.defaults, options); + if (opts.id_prefix && typeof opts.id_prefix !== 'string') { + opts.id_prefix = Math.floor(Math.random() * 1e9).toString(36); + } + else if (!opts.id_prefix) { + opts.id_prefix = ''; + } + return opts; +} + +export default function textile (sourceTx, options) { // get a throw-away copy of options - opt = Object.assign({}, textile.defaults, opt); + const opt = getOptions(options); // run the converter return parseTextile(sourceTx, opt).toHTML(); } @@ -95,7 +106,9 @@ textile.defaults = { 'script', 'style', 'ul' - ] + ], + // id prefix + id_prefix: false }; textile.setOptions = opt => { @@ -104,10 +117,14 @@ textile.setOptions = opt => { }; textile.convert = textile; + textile.parse = textile; -textile.parseTree = function (sourceTx, opt) { - opt = Object.assign({}, textile.defaults, opt); - return addLines(parseTextile(sourceTx, opt), sourceTx); + +textile.parseTree = function (sourceTx, options) { + return addLines( + parseTextile(sourceTx, getOptions(options)), + sourceTx + ); }; export const parseTree = textile.parseTree; diff --git a/src/textile/block.js b/src/textile/block.js index 9533e1d..17f0693 100644 --- a/src/textile/block.js +++ b/src/textile/block.js @@ -188,14 +188,13 @@ export function parseBlock (src, options) { const fnid = fn[1]; const shouldBacklink = !!fn[2]; attr.class = (attr.class ? attr.class + ' ' : '') + 'footnote'; - attr.id = 'fn' + fnid; + attr.id = `fn${options.id_prefix ? '-' : ''}${options.id_prefix}-${fnid}`; const subAttr = copyAttr(attr, { id: 1, class: 1 }); let fnMark = new Element('sup', subAttr).setPos(outerOffs + 2, fnid.length); fnMark.appendChild(new TextNode(fnid)); // eslint-disable-next-line no-constant-condition if (shouldBacklink || options.auto_backlink) { - // FIXME: PHP sensibly adds an instance prefix to the IDs: fn2 => fn18281493636081906fec71d-2 - const backlink = new Element('a', { href: '#fnr' + fnid, ...subAttr }) + const backlink = new Element('a', { href: `#fnr${options.id_prefix ? '-' : ''}${options.id_prefix}-${fnid}`, ...subAttr }) .setPos(outerOffs + 2, fnid.length + (shouldBacklink ? 1 : 0)); backlink.appendChild(fnMark); fnMark = backlink; diff --git a/src/textile/endnote.js b/src/textile/endnote.js index 2a3fced..39960d6 100644 --- a/src/textile/endnote.js +++ b/src/textile/endnote.js @@ -50,17 +50,18 @@ function charCounter (start = 'a') { class EndNoteKeeper { - constructor () { + constructor (id_prefix) { this.refCounter = 1; this.noteCounter = 1; this.byLabel = {}; + this.id_prefix = id_prefix; this.list = []; } getNote (label) { if (!this.byLabel[label]) { this.byLabel[label] = { - id: `note-${this.noteCounter}`, + id: `note${this.id_prefix ? '-' : ''}${this.id_prefix}-${this.noteCounter}`, label: label, index: this.noteCounter, attr: {}, @@ -70,7 +71,7 @@ class EndNoteKeeper { addRef: () => { const note = this.getNote(label); const ref = { - id: `noteref-${note.index}.${note.refs.length + 1}`, + id: `noteref${this.id_prefix ? '-' : ''}${this.id_prefix}-${note.index}.${note.refs.length + 1}`, label: note.label, index: this.refCounter }; @@ -88,7 +89,7 @@ class EndNoteKeeper { function getNotes (options) { if (!options.endNotes) { - options.endNotes = new EndNoteKeeper(); + options.endNotes = new EndNoteKeeper(options.id_prefix); } return options.endNotes; } diff --git a/src/textile/inline.js b/src/textile/inline.js index 795be7c..cf31069 100644 --- a/src/textile/inline.js +++ b/src/textile/inline.js @@ -205,13 +205,15 @@ export function parseInline (src, options) { // footnote if ((m = reFootnote.exec(src)) && /\S/.test(behind)) { - const sup = new Element('sup', { class: 'footnote', id: 'fnr' + m[1] }).setPos(src.offset, m[0].length); + const fnrId = `fnr${options.id_prefix ? '-' : ''}${options.id_prefix}-${m[1]}`; + const sup = new Element('sup', { class: 'footnote', id: fnrId }).setPos(src.offset, m[0].length); if (m[2] === '!') { // "!" suppresses the link sup.appendChild(new TextNode(m[1])); } else { + const fnRef = `#fn${options.id_prefix ? '-' : ''}${options.id_prefix}-${m[1]}`; sup - .appendChild(new Element('a', { href: '#fn' + m[1] }).setPos(src.offset, m[0].length)) + .appendChild(new Element('a', { href: fnRef }).setPos(src.offset, m[0].length)) .appendChild(new TextNode(m[1])); } root.appendChild(sup); diff --git a/test/basic.js b/test/basic.js index 715cce1..059b7f3 100644 --- a/test/basic.js +++ b/test/basic.js @@ -320,14 +320,14 @@ Any old text`; test('footnote reference', t => { const tx = 'This is covered elsewhere[1].'; t.is(textile.convert(tx), - '

      This is covered elsewhere1.

      ', tx); + '

      This is covered elsewhere1.

      ', tx); t.end(); }); test('footnote reference with bang', t => { const tx = 'This is covered elsewhere[1!].'; t.is(textile.convert(tx), - '

      This is covered elsewhere1.

      ', tx); + '

      This is covered elsewhere1.

      ', tx); t.end(); }); @@ -335,7 +335,7 @@ test('footnote reference with bang', t => { test('footnote', t => { const tx = 'fn1. Down here, in fact.'; t.is(textile.convert(tx), - '

      1 Down here, in fact.

      ', tx); + '

      1 Down here, in fact.

      ', tx); t.end(); }); @@ -343,7 +343,7 @@ test('footnote', t => { test('footnote with backlink', t => { const tx = 'fn1^. Down here, in fact.'; t.is(textile.convert(tx), - '

      1 Down here, in fact.

      ', tx); + '

      1 Down here, in fact.

      ', tx); t.end(); }); diff --git a/test/id-prefix.js b/test/id-prefix.js new file mode 100644 index 0000000..38750b3 --- /dev/null +++ b/test/id-prefix.js @@ -0,0 +1,31 @@ +import test from 'tape'; +import textile from '../src/index.js'; + +test('footnotes', t => { + const tx = `text[1]. + +fn1^. note +`; + t.is(textile.convert(tx, { id_prefix: '12345' }), + `

      text1.

      +

      1 note

      `, tx); + t.end(); +}); + +test('endnotes', t => { + const tx = `The sun is reportedly hot,[#hot] just like freshly baked potatoes.[#hot] Ice is cold.[#cold] + +note#hot. Ouch. + +note#cold. Brrr. + +notelist:1. +`; + t.is(textile.convert(tx, { id_prefix: '12345' }), + `

      The sun is reportedly hot,1 just like freshly baked potatoes.1 Ice is cold.2

      +
        +\t
      1. 1 2 Ouch.
      2. +\t
      3. 1 Brrr.
      4. +
      `, tx); + t.end(); +}); diff --git a/test/jstextile.js b/test/jstextile.js index 11302d7..c602281 100644 --- a/test/jstextile.js +++ b/test/jstextile.js @@ -465,7 +465,7 @@ test('image parsing speed bug 2 (issue #40)', t => { test('parse inline textile in footnotes', t => { t.is(textile.convert('fn1. This is _emphasized_ *strong*'), - '

      1 This is emphasized strong

      ', + '

      1 This is emphasized strong

      ', 'footnote inline textile'); t.end(); }); @@ -526,7 +526,7 @@ test('footnotes have to directly follow text (#26)', t => { test('footnote links can be disabled with !', t => { t.is(textile.convert('foobar[1234!]'), - '

      foobar1234

      '); + '

      foobar1234

      '); t.end(); }); @@ -619,6 +619,7 @@ test('inline tag should bound phrase (#57)', t => { t.end(); }); + test('inline tag should bound phrase [2] (#57)', t => { const tx = '*foo*bar'; t.is(textile.convert(tx), @@ -694,42 +695,42 @@ test('less liberal lang attr #76', t => { test('footnote handling #74', t => { t.is( textile.convert('fn1. one'), - '

      1 one

      ', + '

      1 one

      ', 'fn1. one' ); t.is( textile.convert('fn1^. one'), - '

      1 one

      ', + '

      1 one

      ', 'fn1^. one' ); t.is( textile.convert('fn1(foo). one'), - '

      1 one

      ', + '

      1 one

      ', 'fn1(foo). one' ); t.is( textile.convert('fn1^(foo). one'), - '

      1 one

      ', + '

      1 one

      ', 'fn1^(foo). one' ); t.is( textile.convert('fn1. one\n\ntwo'), - '

      1 one

      \n

      two

      ', + '

      1 one

      \n

      two

      ', 'fn1. one\n\ntwo' ); t.is( textile.convert('fn1.. one\n\ntwo'), - '

      1 one
      \n
      \ntwo

      ', + '

      1 one
      \n
      \ntwo

      ', 'fn1.. one\n\ntwo' ); t.is( textile.convert('fn1^(foo). one\n\ntwo'), - '

      1 one

      \n

      two

      ', + '

      1 one

      \n

      two

      ', 'fn1^(foo). one\n\ntwo' ); t.is( textile.convert('fn1^(foo).. one\n\ntwo'), - '

      1 one
      \n
      \ntwo

      ', + '

      1 one
      \n
      \ntwo

      ', 'fn1^(foo).. one\n\ntwo' ); t.end(); diff --git a/test/threshold.js b/test/threshold.js index f4891ba..e33864a 100644 --- a/test/threshold.js +++ b/test/threshold.js @@ -366,8 +366,8 @@ test('footnotes', t => { fn1^. The footnote.`; t.is(textile.convert(tx), - `

      A footnote reference1.

      -

      1 The footnote.

      `, tx); + `

      A footnote reference1.

      +

      1 The footnote.

      `, tx); t.end(); }); @@ -980,7 +980,7 @@ A ["footnoted link":http://thresholdstate.com/][1].`; t.is(textile.convert(tx), `

      A closeimage.
      A tighttextlink.
      -A footnoted link1.

      `, tx); +A footnoted link1.

      `, tx); t.end(); }); From f85f5bc063389288dcc1c4c514a8105467bbfe15 Mon Sep 17 00:00:00 2001 From: Borgar Date: Fri, 7 May 2021 19:22:50 +0000 Subject: [PATCH 25/35] Upper case should not default HTML parsing or XSS --- src/html.js | 10 ++++++---- src/textile/block.js | 6 +++--- src/textile/inline.js | 12 ++++++------ src/textile/safeHref.js | 2 +- test/jstextile.js | 13 +++++++++++++ test/links.js | 6 ++++++ 6 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/html.js b/src/html.js index 87add82..16c1142 100644 --- a/src/html.js +++ b/src/html.js @@ -33,7 +33,8 @@ export function parseHtmlAttr (attrSrc) { let m; if (attrSrc) { while ((m = reAttr.exec(attrSrc))) { - attr[m[1]] = typeof m[2] === 'string' + const attrName = m[1].toLowerCase(); + attr[attrName] = typeof m[2] === 'string' ? m[2].replace(/^(["'])(.*)\1$/, '$2') : null; attrSrc = attrSrc.slice(m[0].length); @@ -82,7 +83,7 @@ export function tokenize (src, whitelistTags, lazy) { else if ((m = testCloseTag(src)) && isAllowed(m[1])) { const token = { type: CLOSE, - tag: m[1], + tag: m[1].toLowerCase(), index: src.index, offset: src.offset, src: m[0] @@ -106,9 +107,10 @@ export function tokenize (src, whitelistTags, lazy) { // open/void tag else if ((m = testOpenTag(src)) && isAllowed(m[1])) { + const tagName = m[1].toLowerCase(); const token = { - type: m[3] || m[1] in singletons ? SINGLE : OPEN, - tag: m[1], + type: (m[3] || tagName in singletons) ? SINGLE : OPEN, + tag: tagName, index: src.index, offset: src.offset, src: m[0] diff --git a/src/textile/block.js b/src/textile/block.js index 17f0693..3631c67 100644 --- a/src/textile/block.js +++ b/src/textile/block.js @@ -236,7 +236,7 @@ export function parseBlock (src, options) { // block HTML if ((m = testOpenTagBlock(src))) { const openPos = src.offset; - const tagName = m[1]; + const tagName = m[1].toLowerCase(); // Is block tag? ... if (options.allowed_block_tags && options.allowed_block_tags.includes(tagName)) { @@ -249,7 +249,7 @@ export function parseBlock (src, options) { } } else if (tagName === 'pre') { - const t = tokenize(src.clone(), { pre: 1, code: 1 }, tagName); + const t = tokenize(src.clone(), { pre: 1, code: 1 }, true); const p = parseHtml(t, true); src.load(); src.advance(p.sourceLength); @@ -263,7 +263,7 @@ export function parseBlock (src, options) { } else if (tagName === 'notextile') { // merge all child elements - const t = tokenize(src.clone(), null, tagName); + const t = tokenize(src.clone(), null, true); let s = 1; // start after open tag while (/^\s+$/.test(t[s].src)) { s++; // skip whitespace diff --git a/src/textile/inline.js b/src/textile/inline.js index cf31069..068ac4c 100644 --- a/src/textile/inline.js +++ b/src/textile/inline.js @@ -163,9 +163,9 @@ export function parseInline (src, options) { // html tag // TODO: this seems to have a lot of overlap with block tags... DRY? if ((m = testOpenTag(src))) { - const tag = m[1]; - const single = m[3] || m[1] in singletons; - const element = new Element(tag, parseHtmlAttr(m[2])); + const tagName = m[1].toLowerCase(); + const single = m[3] || tagName in singletons; + const element = new Element(tagName, parseHtmlAttr(m[2])); const startPos = src.offset; element.html = true; src.advance(m[0]); @@ -177,14 +177,14 @@ export function parseInline (src, options) { } else { // need terminator // gulp up the rest of this block... - const reEndTag = re.compile(`^(.*?)()`, 's'); + const reEndTag = re.compile(`^(.*?)()`, 'is'); let child = element; const m2 = reEndTag.exec(src); if (m2) { - if (tag === 'code') { + if (tagName === 'code') { element.appendChild(new RawNode(m2[1])); } - else if (tag === 'notextile') { + else if (tagName === 'notextile') { // HTML is still parsed, even though textile is not const inner = src.sub(0, m2[1].length); child = parseHtml(tokenize(inner), null, true); diff --git a/src/textile/safeHref.js b/src/textile/safeHref.js index 9b50ce0..83f127e 100644 --- a/src/textile/safeHref.js +++ b/src/textile/safeHref.js @@ -2,7 +2,7 @@ export function safeHref (url, options) { const blacklist = options.blocked_uri; if (url && Array.isArray(blacklist)) { for (let i = 0; i < blacklist.length; i++) { - if (url.startsWith(blacklist[i] + ':')) { + if (url.toLowerCase().startsWith(blacklist[i] + ':')) { return ''; } } diff --git a/test/jstextile.js b/test/jstextile.js index c602281..eab0a68 100644 --- a/test/jstextile.js +++ b/test/jstextile.js @@ -735,3 +735,16 @@ test('footnote handling #74', t => { ); t.end(); }); + + +test('html casing', t => { + // http://w3c.github.io/html-reference/documents.html#case-insensitivity + t.is(textile.convert('
      foo
      bar
      '), + '
      foo
      bar
      ', + 'single line'); + t.is(textile.convert('
      \n\nfoo
      bar
      \n\n
      '), + '
      foo
      bar
      \n
      ', + 'split lines'); + t.end(); +}); + diff --git a/test/links.js b/test/links.js index fa3052d..9ed24ec 100644 --- a/test/links.js +++ b/test/links.js @@ -672,3 +672,9 @@ test('xss attack 5', t => { t.is(textile.convert(tx), '

      link

      ', tx); t.end(); }); + +test('xss attack 6', t => { + const tx = 'link'; + t.is(textile.convert(tx), '

      link

      ', tx); + t.end(); +}); From 88f91fa6bea7b885e97fa1db1160b95bc1c792ef Mon Sep 17 00:00:00 2001 From: Borgar Date: Fri, 11 Jun 2021 18:01:17 +0000 Subject: [PATCH 26/35] Update re to a class to prevent pattern bleed --- src/Re.js | 95 ++++++++++++++++++++++++++++++++++++++ src/html.js | 8 ++-- src/re.js | 78 ------------------------------- src/textile/block.js | 6 +-- src/textile/deflistwiki.js | 4 +- src/textile/endnote.js | 7 ++- src/textile/glyph.js | 3 +- src/textile/inline.js | 30 ++++++------ src/textile/list.js | 6 +-- src/textile/table.js | 5 +- 10 files changed, 127 insertions(+), 115 deletions(-) create mode 100644 src/Re.js delete mode 100644 src/re.js diff --git a/src/Re.js b/src/Re.js new file mode 100644 index 0000000..a1f2626 --- /dev/null +++ b/src/Re.js @@ -0,0 +1,95 @@ +/* +** Regular Expression helper methods +** +** This provides the `re` object, which contains several helper +** methods for working with big regular expressions (soup). +** +*/ + +const _cache = {}; +const toString = Object.prototype.toString; + +export const escape = src => { + return src.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +}; + +export const isRegExp = r => { + return toString.call(r) === '[object RegExp]'; +}; + + +export default class Re { + constructor (patterns) { + this.pattern = Object.assign({ + punct: '[!-/:-@\\[\\\\\\]-`{-~]', + space: '\\s' + }, ...patterns); + } + + collapse (src) { + return src.replace(/(?:#.*?(?:\n|$))/g, '').replace(/\s+/g, ''); + } + + expandPatterns (src) { + // TODO: provide escape for patterns: \[:pattern:] ? + return src.replace(/\[:\s*(\w+)\s*:\]/g, (m, k) => { + const ex = this.pattern[k]; + if (ex) { + return this.expandPatterns(ex); + } + else { + throw new Error('Pattern ' + m + ' not found in ' + src); + } + }); + } + + compile (src, flags) { + let _flags = flags || ''; + + if (isRegExp(src)) { + if (flags == null) { + if (src.global && !/[gG]/.test(_flags)) { + _flags += 'g'; + } + if (src.ignoreCase && !/[iI]/.test(_flags)) { + _flags += 'i'; + } + if (src.unicode && !/[uU]/.test(_flags)) { + _flags += 'u'; + } + if (src.multiline && !/[mM]/.test(_flags)) { + _flags += 'm'; + } + } + // ISSUE: u flag prevents classes: [:txattr:] => [:artx] + src = src.source; + } + + // don't do the same thing twice + const ckey = src + '//' + _flags; + if (ckey in _cache) { + return _cache[ckey]; + } + + // allow classes + let rx = this.expandPatterns(src); + + // allow verbose expressions + if (_flags && /[xX]/.test(_flags)) { + rx = this.collapse(rx); + } + + // allow dotall expressions + if (_flags && /[sS]/.test(_flags)) { + rx = rx.replace(/([^\\])\./g, '$1[^\\0]'); + } + + // clean flags and output new regexp + flags = (flags || '').replace(/[^gimu]/ig, ''); + return (_cache[ckey] = new RegExp(rx, flags)); + } +} + +Re.isRegExp = isRegExp; +Re.escape = escape; + diff --git a/src/html.js b/src/html.js index 16c1142..34018b0 100644 --- a/src/html.js +++ b/src/html.js @@ -1,9 +1,11 @@ -import re from './re.js'; +import Re from './Re.js'; import { Element, TextNode, CommentNode, RawNode } from './VDOM.js'; import { singletons } from './constants.js'; -re.pattern.html_id = '[a-zA-Z][a-zA-Z\\d:]*'; -re.pattern.html_attr = '(?:"[^"]+"|\'[^\']+\'|[^>\\s]+)'; +const re = new Re({ + html_id: '[a-zA-Z][a-zA-Z\\d:]*', + html_attr: '(?:"[^"]+"|\'[^\']+\'|[^>\\s]+)' +}); const reAttr = re.compile(/^\s*([^=\s]+)(?:\s*=\s*("[^"]+"|'[^']+'|[^>\s]+))?/); const reComment = re.compile(/^/, 's'); diff --git a/src/re.js b/src/re.js deleted file mode 100644 index 8a787cb..0000000 --- a/src/re.js +++ /dev/null @@ -1,78 +0,0 @@ -/* -** Regular Expression helper methods -** -** This provides the `re` object, which contains several helper -** methods for working with big regular expressions (soup). -** -*/ - -const _cache = {}; -const toString = Object.prototype.toString; - -const re = { - - pattern: { - punct: '[!-/:-@\\[\\\\\\]-`{-~]', - space: '\\s' - }, - - escape: src => { - return src - .replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); - }, - - collapse: src => { - return src.replace(/(?:#.*?(?:\n|$))/g, '') - .replace(/\s+/g, ''); - }, - - expandPatterns: src => { - // TODO: provide escape for patterns: \[:pattern:] ? - return src.replace(/\[:\s*(\w+)\s*:\]/g, (m, k) => { - const ex = re.pattern[k]; - if (ex) { - return re.expandPatterns(ex); - } - else { - throw new Error('Pattern ' + m + ' not found in ' + src); - } - }); - }, - - isRegExp: r => { - return toString.call(r) === '[object RegExp]'; - }, - - compile: function (src, flags) { - if (re.isRegExp(src)) { - if (arguments.length === 1) { // no flags arg provided, use the RegExp one - flags = (src.global ? 'g' : '') + - (src.ignoreCase ? 'i' : '') + - (src.unicode ? 'u' : '') + - (src.multiline ? 'm' : ''); - } - src = src.source; - } - // don't do the same thing twice - const ckey = src + '//' + (flags || ''); - if (ckey in _cache) { - return _cache[ckey]; - } - // allow classes - let rx = re.expandPatterns(src); - // allow verbose expressions - if (flags && /x/.test(flags)) { - rx = re.collapse(rx); - } - // allow dotall expressions - if (flags && /s/.test(flags)) { - rx = rx.replace(/([^\\])\./g, '$1[^\\0]'); - } - // clean flags and output new regexp - flags = (flags || '').replace(/[^gimu]/g, ''); - return (_cache[ckey] = new RegExp(rx, flags)); - } - -}; - -export default re; diff --git a/src/textile/block.js b/src/textile/block.js index 3631c67..6a5f02c 100644 --- a/src/textile/block.js +++ b/src/textile/block.js @@ -3,7 +3,7 @@ */ import Ribbon from '../Ribbon.js'; import { Element, TextNode, RawNode, HiddenNode, CommentNode, ExtendedNode } from '../VDOM.js'; -import re from '../re.js'; +import Re from '../Re.js'; import { parseHtml, tokenize, parseHtmlAttr, testComment, testOpenTagBlock } from '../html.js'; import { singletons } from '../constants.js'; @@ -19,9 +19,7 @@ import { testTable, parseTable } from './table.js'; import { testEndnote, parseEndnote, testNotelist, parseNotelist, renderNotelist } from './endnote.js'; import { txblocks, txlisthd, txattr } from './re_ext.js'; -re.pattern.txblocks = txblocks; -re.pattern.txlisthd = txlisthd; -re.pattern.txattr = txattr; +const re = new Re({ txblocks, txlisthd, txattr }); const reBlock = re.compile(/^([:txblocks:])/); const reBlockNormal = re.compile(/^(.*?)($|\r?\n(?=[:txlisthd:])|\r?\n(?:\s*\n|$)+)/, 's'); diff --git a/src/textile/deflistwiki.js b/src/textile/deflistwiki.js index 420b579..e6ef0ca 100644 --- a/src/textile/deflistwiki.js +++ b/src/textile/deflistwiki.js @@ -1,11 +1,11 @@ /* definitions list parser */ import { Element, TextNode } from '../VDOM.js'; -import re from '../re.js'; +import Re from '../Re.js'; import { parseInline } from './inline.js'; import { parseAttr } from './attr.js'; import { txattr } from './re_ext.js'; -re.pattern.txattr = txattr; +const re = new Re({ txattr }); const reDeflistWiki = re.compile( /^[;:](?:[:txattr:])?(\. ?| )[^\0]*?(?:\s*\n\r?\n|$)/ ); diff --git a/src/textile/endnote.js b/src/textile/endnote.js index 39960d6..a20f225 100644 --- a/src/textile/endnote.js +++ b/src/textile/endnote.js @@ -1,15 +1,14 @@ /* textile inline parser */ import { Element, TextNode, HiddenNode } from '../VDOM.js'; -import re from '../re.js'; +import Re from '../Re.js'; import { parseAttr } from './attr.js'; import { parseInline } from './inline.js'; - import { txattr } from './re_ext.js'; -re.pattern.txattr = txattr; export const symbols = '¤§µ¶†‡•∗∴◊♠♣♥♦|'; +const re = new Re({ txattr, symbols }); const reEndnoteDef = re.compile( /^note#([^%<*!@#^([{.\s]+)([*!^]?)([:txattr:])\.?\s+(.*?)($|\r?\n(?:\s*\n|$)+)/ ); @@ -17,7 +16,7 @@ const reEndnoteRef = re.compile( /^\[([:txattr:])#([^\]!]+?)(!?)\]/ ); const reNotelist = re.compile( - /^notelist([:txattr:])(:(?:\p{L}|\p{M}|\p{N}|\p{Pc}|[¤§µ¶†‡•∗∴◊♠♣♥♦|]))?([\^!]?)(\+?)\.?\s*?(?:$|\r?\n(?:\s*\n|$)+)/u + /^notelist([:txattr:])(:(?:\p{L}|\p{M}|\p{N}|\p{Pc}|[[:symbols:]]))?([\^!]?)(\+?)\.?\s*?(?:$|\r?\n(?:\s*\n|$)+)/, 'u' ); function charCounter (start = 'a') { diff --git a/src/textile/glyph.js b/src/textile/glyph.js index b46148b..e7318d4 100644 --- a/src/textile/glyph.js +++ b/src/textile/glyph.js @@ -1,5 +1,6 @@ /* textile glyph parser */ -import re from '../re.js'; +import Re from '../Re.js'; +const re = new Re(); const reApostrophe = /(\w)'(\w)/g; const reArrow = /([^-]|^)->/; diff --git a/src/textile/inline.js b/src/textile/inline.js index 068ac4c..03ca8aa 100644 --- a/src/textile/inline.js +++ b/src/textile/inline.js @@ -1,6 +1,6 @@ /* textile inline parser */ import { Element, TextNode, RawNode, CommentNode } from '../VDOM.js'; -import re from '../re.js'; +import Re from '../Re.js'; import { parseAttr } from './attr.js'; import { testEndnoteRef, parseEndnoteRef } from './endnote.js'; @@ -8,9 +8,17 @@ import { parseHtml, parseHtmlAttr, tokenize, testComment, testOpenTag } from '.. import { singletons } from '../constants.js'; import { ucaps, txattr, txcite } from './re_ext.js'; -re.pattern.txattr = txattr; -re.pattern.txcite = txcite; -re.pattern.ucaps = ucaps; +const re = new Re({ ucaps, txattr, txcite }); + +const rePhrase = /^(\[?)(__?|\*\*?|\?\?|[-+^~@%])/; +const reImage = re.compile(/^!(?!\s)([:txattr:](?:\.[^\n\S]|\.(?:[^./]))?)([^!\s]+?) ?(?:\(((?:[^()]|\([^()]+\))+)\))?!(?::([^\s]+?(?=[!-.:-@[\\\]-`{-~](?:$|\s)|\s|$)))?/); +const reImageFenced = re.compile(/^\[!(?!\s)([:txattr:](?:\.[^\n\S]|\.(?:[^./]))?)([^!\s]+?) ?(?:\(((?:[^()]|\([^()]+\))+)\))?!(?::([^\s]+?(?=[!-.:-@[\\\]-`{-~](?:$|\s)|\s|$)))?\]/); +// NB: there is an exception in here to prevent matching "TM)" +const reCaps = re.compile(/^((?!TM\)|tm\))[[:ucaps:]](?:[[:ucaps:]\d]{1,}(?=\()|[[:ucaps:]\d]{2,}))(?:\((.*?)\))?(?=\W|$)/); +const reLink = re.compile(/^"(?!\s)((?:[^"]|"(?![\s:])[^\n"]+"(?!:))+)"[:txcite:]/); +const reLinkFenced = /^\["([^\n]+?)":((?:\[[a-z0-9]*\]|[^\]])+)\]/; +const reLinkTitle = /\s*\(((?:\([^()]*\)|[^()])+)\)$/; +const reFootnote = /^\[(\d+)(!?)\]/; const phraseConvert = { '*': 'strong', @@ -26,16 +34,6 @@ const phraseConvert = { '@': 'code' }; -const rePhrase = /^(\[?)(__?|\*\*?|\?\?|[-+^~@%])/; -const reImage = re.compile(/^!(?!\s)([:txattr:](?:\.[^\n\S]|\.(?:[^./]))?)([^!\s]+?) ?(?:\(((?:[^()]|\([^()]+\))+)\))?!(?::([^\s]+?(?=[!-.:-@[\\\]-`{-~](?:$|\s)|\s|$)))?/); -const reImageFenced = re.compile(/^\[!(?!\s)([:txattr:](?:\.[^\n\S]|\.(?:[^./]))?)([^!\s]+?) ?(?:\(((?:[^()]|\([^()]+\))+)\))?!(?::([^\s]+?(?=[!-.:-@[\\\]-`{-~](?:$|\s)|\s|$)))?\]/); -// NB: there is an exception in here to prevent matching "TM)" -const reCaps = re.compile(/^((?!TM\)|tm\))[[:ucaps:]](?:[[:ucaps:]\d]{1,}(?=\()|[[:ucaps:]\d]{2,}))(?:\((.*?)\))?(?=\W|$)/); -const reLink = re.compile(/^"(?!\s)((?:[^"]|"(?![\s:])[^\n"]+"(?!:))+)"[:txcite:]/); -const reLinkFenced = /^\["([^\n]+?)":((?:\[[a-z0-9]*\]|[^\]])+)\]/; -const reLinkTitle = /\s*\(((?:\([^()]*\)|[^()])+)\)$/; -const reFootnote = /^\[(\d+)(!?)\]/; - const getMatchRe = (tok, fence, code) => { let mMid; let mEnd; @@ -44,13 +42,13 @@ const getMatchRe = (tok, fence, code) => { mEnd = '(?:])'; } else { - const t1 = re.escape(tok.charAt(0)); + const t1 = Re.escape(tok.charAt(0)); mMid = code ? '^(\\S+|\\S+.*?\\S)' : `^([^\\s${t1}]+|[^\\s${t1}].*?\\S(${t1}*))`; mEnd = '(?=$|[\\s.,"\'!?;:()«»„“”‚‘’<>])'; } - return re.compile(`${mMid}(?:${re.escape(tok)})${mEnd}`); + return re.compile(`${mMid}(?:${Re.escape(tok)})${mEnd}`); }; export function parseInline (src, options) { diff --git a/src/textile/list.js b/src/textile/list.js index 664758d..a85d779 100644 --- a/src/textile/list.js +++ b/src/textile/list.js @@ -1,13 +1,11 @@ /* textile list parser */ -import re from '../re.js'; +import Re from '../Re.js'; import { Element, TextNode } from '../VDOM.js'; import { parseAttr } from './attr.js'; import { parseInline } from './inline.js'; import { txlisthd, txlisthd2 } from './re_ext.js'; -re.pattern.txlisthd = txlisthd; -re.pattern.txlisthd2 = txlisthd2; - +const re = new Re({ txlisthd, txlisthd2 }); const reList = re.compile(/^((?:[:txlisthd:][^\0]*?(?:\r?\n|$))+)(\s*\n|$)/, 's'); const reItem = re.compile(/^([#*]+)([^\0]+?)(\n(?=[:txlisthd2:])|$) */, 's'); diff --git a/src/textile/table.js b/src/textile/table.js index e7c82ee..2c83579 100644 --- a/src/textile/table.js +++ b/src/textile/table.js @@ -1,13 +1,12 @@ /* textile table parser */ -import re from '../re.js'; +import Re from '../Re.js'; import { Element, TextNode } from '../VDOM.js'; import { parseAttr } from './attr.js'; import { parseInline } from './inline.js'; import { txattr } from './re_ext.js'; -re.pattern.txattr = txattr; - +const re = new Re({ txattr }); const reTable = re.compile(/^((?:table[:txattr:]\.(?:\s(.+?))\s*\n)?(?:(?:[:txattr:]\.[^\n\S]*)?\|.*?\|[^\n\S]*(?:\n|$))+)([^\n\S]*\n+)?/, 's'); const reHead = /^table(_?)([^\n]*?)\.(?:[ \t](.+?))?\s*\n/; const reRow = re.compile(/^((?:\|([~^-][:txattr:])\.\s*\n)?([:txattr:]\.[^\n\S]*)?\|)(.*?)\|[^\n\S]*(\n|$)/, 's'); From 3f29341d584e0948d9bf9759ac849a0fa94bebe0 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sat, 12 Jun 2021 10:14:06 +0000 Subject: [PATCH 27/35] Support all regexp flags in Re --- src/Re.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Re.js b/src/Re.js index a1f2626..302db57 100644 --- a/src/Re.js +++ b/src/Re.js @@ -54,9 +54,15 @@ export default class Re { if (src.ignoreCase && !/[iI]/.test(_flags)) { _flags += 'i'; } + if (src.dotAll && !/[sS]/.test(_flags)) { + _flags += 's'; + } if (src.unicode && !/[uU]/.test(_flags)) { _flags += 'u'; } + if (src.sticky && !/[yY]/.test(_flags)) { + _flags += 'y'; + } if (src.multiline && !/[mM]/.test(_flags)) { _flags += 'm'; } @@ -85,11 +91,10 @@ export default class Re { } // clean flags and output new regexp - flags = (flags || '').replace(/[^gimu]/ig, ''); + flags = (flags || '').replace(/[^giymu]/ig, ''); return (_cache[ckey] = new RegExp(rx, flags)); } } Re.isRegExp = isRegExp; Re.escape = escape; - From 1520ac7ff48f68bc12204097866067fb634da1d3 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sat, 12 Jun 2021 10:40:17 +0000 Subject: [PATCH 28/35] Glyph conversions rewritten The glyph conversions are run on all text nodes. This was a performance bottleneck so it has been rewritten for speed as well as given an accuracy overhaul. The most notable change is that glyphs are no longer entity encoded by default. This seems like a silly default for JavaScript as well as fairly pointless if no other non-ascii entitles are being encoded. An option has been added to switch to the older behavior though. --- src/index.js | 4 +- src/textile/block.js | 4 +- src/textile/glyph.js | 213 ++++++++++++++++++++++++++++++++--------- test/basic.js | 60 ++++++------ test/filter_pba.js | 4 +- test/glyphs.js | 194 +++++++++++++++++++++++++++++++++++++ test/instiki.js | 8 +- test/jstextile.js | 26 ++--- test/linebreaks.js | 2 +- test/links.js | 22 ++--- test/poignant.js | 6 +- test/source-offsets.js | 3 +- test/textism.js | 6 +- test/threshold.js | 32 +++---- 14 files changed, 450 insertions(+), 134 deletions(-) create mode 100644 test/glyphs.js diff --git a/src/index.js b/src/index.js index 87683bc..ab305d3 100644 --- a/src/index.js +++ b/src/index.js @@ -108,7 +108,9 @@ textile.defaults = { 'ul' ], // id prefix - id_prefix: false + id_prefix: false, + // glyph entities + glyph_entities: false }; textile.setOptions = opt => { diff --git a/src/textile/block.js b/src/textile/block.js index 6a5f02c..666c21e 100644 --- a/src/textile/block.js +++ b/src/textile/block.js @@ -397,9 +397,9 @@ export function parseBlock (src, options) { node.setAttribute('href', safeHref(href, options)); } } - // convert certain glyphs in text nodes + // convert glyphs in text nodes if (node instanceof TextNode) { - node.data = parseGlyph(node.data); + node.data = parseGlyph(node.data, options); } }); diff --git a/src/textile/glyph.js b/src/textile/glyph.js index e7318d4..d61b7dd 100644 --- a/src/textile/glyph.js +++ b/src/textile/glyph.js @@ -1,50 +1,169 @@ /* textile glyph parser */ import Re from '../Re.js'; -const re = new Re(); - -const reApostrophe = /(\w)'(\w)/g; -const reArrow = /([^-]|^)->/; -const reClosingDQuote = re.compile(/([^\s[(])"(?=$|\s|[:punct:])/g); -const reClosingSQuote = re.compile(/([^\s[(])'(?=$|\s|[:punct:])/g); -const reCopyright = /(\b ?|\s|^)(?:\(C\)|\[C\])/gi; -const reDimsign = /([\d.,]+['"]? ?)x( ?)(?=[\d.,]['"]?)/g; -const reDoublePrime = re.compile(/(\d*[.,]?\d+)"(?=\s|$|[:punct:])/g); -const reEllipsis = /([^.]?)\.{3}/g; -const reEmdash = /(^|[\s\w])--([\s\w]|$)/g; -const reEndash = / - /g; -const reOpenDQuote = /"/g; -const reOpenSQuote = /'/g; -const reRegistered = /(\b ?|\s|^)(?:\(R\)|\[R\])/gi; -const reSinglePrime = re.compile(/(\d*[.,]?\d+)'(?=\s|$|[:punct:])/g); -const reTrademark = /(\b ?|\s|^)(?:\((?:TM|tm)\)|\[(?:TM|tm)\])/g; - -export function parseGlyph (src) { - if (typeof src !== 'string') { - return src; - } - // NB: order is important here ... - return src - .replace(reArrow, '$1→') - .replace(reDimsign, '$1×$2') - .replace(reEllipsis, '$1…') - .replace(reEmdash, '$1—$2') - .replace(reEndash, ' – ') - .replace(reTrademark, '$1™') - .replace(reRegistered, '$1®') - .replace(reCopyright, '$1©') - // double quotes - .replace(reDoublePrime, '$1″') - .replace(reClosingDQuote, '$1”') - .replace(reOpenDQuote, '“') - // single quotes - .replace(reSinglePrime, '$1′') - .replace(reApostrophe, '$1’$2') - .replace(reClosingSQuote, '$1’') - .replace(reOpenSQuote, '‘') - // fractions and degrees - .replace(/[([]1\/4[\])]/, '¼') - .replace(/[([]1\/2[\])]/, '½') - .replace(/[([]3\/4[\])]/, '¾') - .replace(/[([]o[\])]/, '°') - .replace(/[([]\+\/-[\])]/, '±'); + +const QUOTE_SINGLE_OPEN = '‘'; +const QUOTE_SINGLE_CLOSE = '’'; +const QUOTE_DOUBLE_OPEN = '“'; +const QUOTE_DOUBLE_CLOSE = '”'; +const PRIME = '′'; +const PRIME_DOUBLE = '″'; +const ELLIPSIS = '…'; +const ARROW = '→'; +const EMDASH = '—'; +const ENDASH = '–'; +const DIMENSION = '×'; +const TRADEMARK = '™'; +const REGISTERED = '®'; +const COPYRIGHT = '©'; +const HALF = '½'; +const QUARTER = '¼'; +const THREEQUARTERS = '¾'; +const DEGREES = '°'; +const PLUSMINUS = '±'; + +const toEntity = char => { + return char ? `&#${char.charCodeAt(0)};` : ''; +}; + +const handleCopy = (m, index, s, ent) => { + return (/(\b ?|\s|^)$/.test(s.slice(0, index))) ? ent : m; +}; + +const handleDimension = (m, index, s, ent) => { + if ( + /\d[.,'")\]]* ?$/.test(s.slice(0, index)) && + / ?[.,([]*\d/.test(s.slice(index + 1)) + ) { + return ent; + } + return m; +}; + +const handleSingleQuote = (m, index, s, ent) => { + const preFix = s.slice(0, index); + const postFix = s.slice(index + 1); + // prime + if ( + /(^|[^'])\d*[.,)\]]?\d[)\]]?$/.test(preFix) && + /^(\s|\d|x|X|\p{P}|$)/u.test(postFix) + ) { + return ent ? toEntity(PRIME) : PRIME; + } + // single + if ( + (!preFix && /^(\s|s)\b/.test(postFix)) || + // "' " || "'s" + (/(?:\p{L}|\p{M}|\p{N}|\p{Pc}|\))$/u.test(preFix) && /^(?:\p{L}|\p{M}|\p{N}|\p{Pc})/u.test(postFix)) || + // Back in '88/the '90s but not in his '90s', '1', '1.' '10m' or '5.png' + (/\s$/.test(preFix) && /^(\d+\w?)\b(?!\.?\w*?')/.test(postFix)) + ) { + return ent ? toEntity(QUOTE_SINGLE_CLOSE) : QUOTE_SINGLE_CLOSE; + } + // single open following open bracket + if (/[([{]$/.test(preFix) && /^\S/.test(postFix)) { + return ent ? toEntity(QUOTE_SINGLE_OPEN) : QUOTE_SINGLE_OPEN; + } + // single closing + if (/\S$/.test(preFix) && /^(\s|\p{P}|$)/u.test(postFix)) { + return ent ? toEntity(QUOTE_SINGLE_CLOSE) : QUOTE_SINGLE_CLOSE; + } + // default single opening + return ent ? toEntity(QUOTE_SINGLE_OPEN) : QUOTE_SINGLE_OPEN; +}; + +const handleDoubleQuote = (m, index, s, ent) => { + const after = s[index + 1] || ''; + const preFix = s.slice(0, index); + // prime + if (/\d[)\]]?$/.test(preFix) && /^(\s|x|X|\p{P}|$)/u.test(after)) { + return ent ? toEntity(PRIME_DOUBLE) : PRIME_DOUBLE; + } + // double open following an open bracket + if (/[([{]$/.test(preFix) && /^\S/.test(after)) { + return ent ? toEntity(QUOTE_DOUBLE_OPEN) : QUOTE_DOUBLE_OPEN; + } + // double closing + if (/\S$/.test(preFix) && /^(\s|\p{P}|$)/u.test(after)) { + return ent ? toEntity(QUOTE_DOUBLE_CLOSE) : QUOTE_DOUBLE_CLOSE; + } + // default double opening + return ent ? toEntity(QUOTE_DOUBLE_OPEN) : QUOTE_DOUBLE_OPEN; +}; + +const handleDash = (m, index, s, ent) => { + return (/^[ \t]/.test(s[index - 1]) && /^\s/.test(s[index + 1])) ? ent : m; +}; + +const handleDoubleDash = (m, index, s, ent) => { + return (s[index - 1] !== '-' && s[index + 2] !== '-') ? ent : m; +}; + +const handleEllipsis = (m, index, s, ent) => { + return (s[index - 1] !== '.') ? ent : m; +}; + +const handleArrow = (m, index, s, ent) => { + return (s[index - 1] !== '-') ? ent : m; +}; + +const handlers = { + // Dimension sign + 'x': [ DIMENSION, handleDimension ], + 'X': [ DIMENSION, handleDimension ], + // Apostrophe | Single open | Single closing | Single prime + "'": [ null, handleSingleQuote ], + // Double open| Double closing | Double prime + '"': [ null, handleDoubleQuote ], + // Ellipsis + '...': [ ELLIPSIS, handleEllipsis ], + // Arrow + '->': [ ARROW, handleArrow ], + // Em-dash + '--': [ EMDASH, handleDoubleDash ], + // En-dash + '-': [ ENDASH, handleDash ], + // Trademark + '(tm)': [ TRADEMARK, handleCopy ], + '(TM)': [ TRADEMARK, handleCopy ], + '[tm]': [ TRADEMARK, handleCopy ], + '[TM]': [ TRADEMARK, handleCopy ], + // Registered + '(r)': [ REGISTERED, handleCopy ], + '(R)': [ REGISTERED, handleCopy ], + '[r]': [ REGISTERED, handleCopy ], + '[R]': [ REGISTERED, handleCopy ], + // Copyright + '(c)': [ COPYRIGHT, handleCopy ], + '(C)': [ COPYRIGHT, handleCopy ], + '[c]': [ COPYRIGHT, handleCopy ], + '[C]': [ COPYRIGHT, handleCopy ], + // 1/4 + '(1/4)': [ QUARTER, null ], + '[1/4]': [ QUARTER, null ], + // 1/2 + '(1/2)': [ HALF, null ], + '[1/2]': [ HALF, null ], + // 3/4 + '(3/4)': [ THREEQUARTERS, null ], + '[3/4]': [ THREEQUARTERS, null ], + // Degrees + '(o)': [ DEGREES, null ], + '[o]': [ DEGREES, null ], + // Plus minus + '(+/-)': [ PLUSMINUS, null ], + '[+/-]': [ PLUSMINUS, null ] +}; + +const _tokens = Object.keys(handlers).map(Re.escape); +const re_matchGlyph = new Re().compile('(?:' + _tokens.join('|') + ')', 'g'); + +export function parseGlyph (src, options) { + return src.replace(re_matchGlyph, (m, index, s) => { + const [ glyph, handler ] = handlers[m]; + const ent = options.glyph_entities ? toEntity(glyph) : glyph; + if (handler) { + return handler(m, index, s, ent || options.glyph_entities); + } + return ent; + }); } diff --git a/test/basic.js b/test/basic.js index 059b7f3..f78664c 100644 --- a/test/basic.js +++ b/test/basic.js @@ -49,7 +49,7 @@ test('extended block containing block start', t => { When the elephant comes to take a p. you...`; t.is(textile.convert(tx), `

      I saw a ship. It ate my elephant.

      -

      When the elephant comes to take a p. you…

      `, tx); +

      When the elephant comes to take a p. you…

      `, tx); t.end(); }); @@ -71,7 +71,7 @@ When the elephant comes to take a p. you...`; t.is(textile.convert(tx), `

      I saw a ship. It ate my elephant.

      -

      When the elephant comes to take a p. you…

      +

      When the elephant comes to take a p. you…

      `, tx); t.end(); }); @@ -165,7 +165,7 @@ And none replied.

      `, tx); test('curly quotes', t => { const tx = '"Observe!"'; t.is(textile.convert(tx), - '

      “Observe!”

      ', tx); + '

      “Observe!”

      ', tx); t.end(); }); @@ -175,8 +175,8 @@ test('quotes contained in multi-paragraph quotes', t => { "It's wonderful."`; t.is(textile.convert(tx), - `

      “I first learned about this thing called “Redcloth” several years ago.

      -

      “It’s wonderful.”

      `, tx); + `

      “I first learned about this thing called “Redcloth” several years ago.

      +

      “It’s wonderful.”

      `, tx); t.end(); }); @@ -184,7 +184,7 @@ test('quotes contained in multi-paragraph quotes', t => { test('double hyphens', t => { const tx = 'Observe--very nice!'; t.is(textile.convert(tx), - '

      Observe—very nice!

      ', tx); + '

      Observe—very nice!

      ', tx); t.end(); }); @@ -192,7 +192,7 @@ test('double hyphens', t => { test('double hyphens with spaces', t => { const tx = 'Observe -- very nice!'; t.is(textile.convert(tx), - '

      Observe — very nice!

      ', tx); + '

      Observe — very nice!

      ', tx); t.end(); }); @@ -200,7 +200,7 @@ test('double hyphens with spaces', t => { test('parenthetical phrase set off with em dashes', t => { const tx = 'An emdash indicates a parenthetical thought--like this one--which is set apart from the rest of a sentence.'; t.is(textile.convert(tx), - '

      An emdash indicates a parenthetical thought—like this one—which is set apart from the rest of a sentence.

      ', tx); + '

      An emdash indicates a parenthetical thought—like this one—which is set apart from the rest of a sentence.

      ', tx); t.end(); }); @@ -208,7 +208,7 @@ test('parenthetical phrase set off with em dashes', t => { test('parenthetical phrase set off with em dashes surrounded by spaces', t => { const tx = 'An emdash indicates a parenthetical thought -- like this one -- which is set apart from the rest of a sentence.'; t.is(textile.convert(tx), - '

      An emdash indicates a parenthetical thought — like this one — which is set apart from the rest of a sentence.

      ', tx); + '

      An emdash indicates a parenthetical thought — like this one — which is set apart from the rest of a sentence.

      ', tx); t.end(); }); @@ -216,7 +216,7 @@ test('parenthetical phrase set off with em dashes surrounded by spaces', t => { test('single hyphens with spaces', t => { const tx = 'Observe - tiny and brief.'; t.is(textile.convert(tx), - '

      Observe – tiny and brief.

      ', tx); + '

      Observe – tiny and brief.

      ', tx); t.end(); }); @@ -232,7 +232,7 @@ test('midword hyphens ', t => { test('ellipses', t => { const tx = 'Observe...'; t.is(textile.convert(tx), - '

      Observe…

      ', tx); + '

      Observe…

      ', tx); t.end(); }); @@ -240,7 +240,7 @@ test('ellipses', t => { test('dimension sign', t => { const tx = 'Observe: 2x3.'; t.is(textile.convert(tx), - '

      Observe: 2×3.

      ', tx); + '

      Observe: 2×3.

      ', tx); t.end(); }); @@ -248,7 +248,7 @@ test('dimension sign', t => { test('dimension sign with space after', t => { const tx = 'The room is 2x3 inches big.'; t.is(textile.convert(tx), - '

      The room is 2×3 inches big.

      ', tx); + '

      The room is 2×3 inches big.

      ', tx); t.end(); }); @@ -256,7 +256,7 @@ test('dimension sign with space after', t => { test('dimension sign with spaces', t => { const tx = 'Observe: 2 x 4.'; t.is(textile.convert(tx), - '

      Observe: 2 × 4.

      ', tx); + '

      Observe: 2 × 4.

      ', tx); t.end(); }); @@ -264,7 +264,7 @@ test('dimension sign with spaces', t => { test('dimension signs chained', t => { const tx = 'Observe: 2x3x4.'; t.is(textile.convert(tx), - '

      Observe: 2×3×4.

      ', tx); + '

      Observe: 2×3×4.

      ', tx); t.end(); }); @@ -272,7 +272,7 @@ test('dimension signs chained', t => { test('dimension signs with double primes', t => { const tx = 'My mouse: 2.5" x 4".'; t.is(textile.convert(tx), - '

      My mouse: 2.5″ × 4″.

      ', tx); + '

      My mouse: 2.5″ × 4″.

      ', tx); t.end(); }); @@ -280,7 +280,7 @@ test('dimension signs with double primes', t => { test('dimension signs with single primes', t => { const tx = "My office: 5' x 4.5'."; t.is(textile.convert(tx), - '

      My office: 5′ × 4.5′.

      ', tx); + '

      My office: 5′ × 4.5′.

      ', tx); t.end(); }); @@ -288,7 +288,7 @@ test('dimension signs with single primes', t => { test('trademark and copyright', t => { const tx = 'one(TM), two(R), three(C).'; t.is(textile.convert(tx), - '

      one™, two®, three©.

      ', tx); + '

      one™, two®, three©.

      ', tx); t.end(); }); @@ -385,7 +385,7 @@ I really know.

      `, tx); test('citation', t => { const tx = "??Cat's Cradle?? by Vonnegut"; t.is(textile.convert(tx), - '

      Cat’s Cradle by Vonnegut

      ', tx); + '

      Cat’s Cradle by Vonnegut

      ', tx); t.end(); }); @@ -409,7 +409,7 @@ test('code phrases not created with multiple email addresses', t => { test('del', t => { const tx = "I'm -sure- not sure."; t.is(textile.convert(tx), - '

      I’m sure not sure.

      ', tx); + '

      I’m sure not sure.

      ', tx); t.end(); }); @@ -473,7 +473,7 @@ test('tight superscript and subscript', t => { test('span', t => { const tx = "I'm %unaware% of most soft drinks."; t.is(textile.convert(tx), - '

      I’m unaware of most soft drinks.

      ', tx); + '

      I’m unaware of most soft drinks.

      ', tx); t.end(); }); @@ -482,7 +482,7 @@ test('style span', t => { const tx = `I'm %{color:red}unaware% of most %{font-size:0.5em;}soft drinks%.`; t.is(textile.convert(tx), - `

      I’m unaware
      + `

      I’m unaware
      of most soft drinks.

      `, tx); t.end(); }); @@ -748,7 +748,7 @@ and "it's":hobix "all":hobix I ever [hobix]http://hobix.com`; t.is(textile.convert(tx), `

      I am crazy about Hobix
      -and it’s all I ever
      +and it’s all I ever
      link to!

      `, tx); t.end(); }); @@ -1087,7 +1087,7 @@ test('parentheses in asterisks', t => { test('parentheses in underscores in quotes', t => { const tx = '"before _(in parens)_ after"'; t.is(textile.convert(tx), - '

      “before (in parens) after”

      ', tx); + '

      “before (in parens) after”

      ', tx); t.end(); }); @@ -1103,7 +1103,7 @@ test('underscores in parentheses', t => { test('underscores in parentheses in quotes', t => { const tx = '"one _two three_ (four _five six_) seven"'; t.is(textile.convert(tx), - '

      “one two three (four five six) seven”

      ', tx); + '

      “one two three (four five six) seven”

      ', tx); t.end(); }); @@ -1119,7 +1119,7 @@ test('underscores in parentheses 2', t => { test('underscores in parentheses in quotes 2', t => { const tx = '"one (two _three four_) five"'; t.is(textile.convert(tx), - '

      “one (two three four) five”

      ', tx); + '

      “one (two three four) five”

      ', tx); t.end(); }); @@ -1148,8 +1148,8 @@ test('square brackets are preserved', t => { const tx = `citation ["(Berk.) Hilton"], see [Papers "blah blah."]`; t.is(textile.convert(tx), - `

      citation [“(Berk.) Hilton”], see
      -[Papers “blah blah.”]

      `, tx); + `

      citation [“(Berk.) Hilton”], see
      +[Papers “blah blah.”]

      `, tx); t.end(); }); @@ -1255,7 +1255,7 @@ test('citation ending with question mark', t => { test('citation including question mark', t => { const tx = "??What's the Matter with Kansas? How Conservatives Won the Heart of America?? is a great book!"; t.is(textile.convert(tx), - '

      What’s the Matter with Kansas? How Conservatives Won the Heart of America is a great book!

      ', tx); + '

      What’s the Matter with Kansas? How Conservatives Won the Heart of America is a great book!

      ', tx); t.end(); }); @@ -1273,7 +1273,7 @@ _and_this_too_ it should keep the emphasis but does not with redcloth.`; test('code captures spaces when made explicit with square brackets', t => { const tx = "Start a paragraph with [@p. @] (that's p, a period, and a space)."; t.is(textile.convert(tx), - '

      Start a paragraph with p. (that’s p, a period, and a space).

      ', tx); + '

      Start a paragraph with p. (that’s p, a period, and a space).

      ', tx); t.end(); }); diff --git a/test/filter_pba.js b/test/filter_pba.js index f4b2ae4..3434cb7 100644 --- a/test/filter_pba.js +++ b/test/filter_pba.js @@ -5,13 +5,13 @@ import textile from '../src/index.js'; test('correct application of double quote entity when using styles', t => { const tx = 'p{background: #white url("../chunky_bacon.jpg")}. The quick brown "cartoon" fox jumps over the lazy dog'; t.is(textile.convert(tx), - '

      The quick brown “cartoon” fox jumps over the lazy dog

      ', tx); + '

      The quick brown “cartoon” fox jumps over the lazy dog

      ', tx); t.end(); }); test('correct application of single quote entity when using styles', t => { const tx = "p{background: #white url('../chunky_bacon.jpg')}. The quick brown 'cartoon' fox jumps over the lazy dog"; t.is(textile.convert(tx), - '

      The quick brown ‘cartoon’ fox jumps over the lazy dog

      ', tx); + '

      The quick brown ‘cartoon’ fox jumps over the lazy dog

      ', tx); t.end(); }); diff --git a/test/glyphs.js b/test/glyphs.js new file mode 100644 index 0000000..77eeb17 --- /dev/null +++ b/test/glyphs.js @@ -0,0 +1,194 @@ +/* eslint-disable quotes */ +import test from 'tape'; +import textile from '../src/index.js'; + +test('Basic glyphs', t => { + t.is(textile.convert(`"Textile(c)" is a registered(r) 'trademark' of Textpattern(tm) -- or TXP(That's textpattern!) -- at least it was - back in '88 when 2x4 was (+/-)5(o)C ... QED!`), + `

      “Textile©” is a registered® ‘trademark’ of Textpattern™ — or TXP — at least it was – back in ’88 when 2×4 was ±5°C … QED!

      `); + t.is(textile.convert(`p{font-size:200%;}. 2(1/4) 3(1/2) 4(3/4)`), + `

      2¼ 3½ 4¾

      `); + t.is(textile.convert(`"." ".." "..." '.' '..' '...' Allow quoted periods.`), + `

      “.” “..” “…” ‘.’ ‘..’ ‘…’ Allow quoted periods.

      `); + t.end(); +}); + +test('Basic glyphs as entities', t => { + const opts = { glyph_entities: true }; + t.is(textile.convert(`"Textile(c)" is a registered(r) 'trademark' of Textpattern(tm) -- or TXP(That's textpattern!) -- at least it was - back in '88 when 2x4 was (+/-)5(o)C ... QED!`, opts), + `

      “Textile©” is a registered® ‘trademark’ of Textpattern™ — or TXP — at least it was – back in ’88 when 2×4 was ±5°C … QED!

      `); + t.is(textile.convert(`p{font-size:200%;}. 2(1/4) 3(1/2) 4(3/4)`, opts), + `

      2¼ 3½ 4¾

      `); + t.is(textile.convert(`"." ".." "..." '.' '..' '...' Allow quoted periods.`, opts), + `

      “.” “..” “…” ‘.’ ‘..’ ‘…’ Allow quoted periods.

      `); + t.end(); +}); + +test('Dimensions', t => { + t.is(textile.convert(`[1/2] x [1/4] and (1/2)" x [1/4]" and (1/2)' x (1/4)'`), + `

      ½ × ¼ and ½″ × ¼″ and ½′ × ¼′

      `); + t.is(textile.convert(`(2 x 10) X (3 / 4) x (200 + 64)`), + `

      (2 × 10) × (3 / 4) × (200 + 64)

      `); + t.is(textile.convert(`1 x 1 = 1`), + `

      1 × 1 = 1

      `); + t.is(textile.convert(`1 x1 = 1`), + `

      1 ×1 = 1

      `); + t.is(textile.convert(`1x 1 = 1`), + `

      1× 1 = 1

      `); + t.is(textile.convert(`1x1 = 1`), + `

      1×1 = 1

      `); + t.is(textile.convert(`1 X 1 = 1`), + `

      1 × 1 = 1

      `); + t.is(textile.convert(`1 X1 = 1`), + `

      1 ×1 = 1

      `); + t.is(textile.convert(`1X 1 = 1`), + `

      1× 1 = 1

      `); + t.is(textile.convert(`1X1 = 1`), + `

      1×1 = 1

      `); + t.is(textile.convert(`What is 1 x 1?`), + `

      What is 1 × 1?

      `); + t.is(textile.convert(`What is 1x1?`), + `

      What is 1×1?

      `); + t.is(textile.convert(`What is 1 X 1?`), + `

      What is 1 × 1?

      `); + t.is(textile.convert(`What is 1X1?`), + `

      What is 1×1?

      `); + t.is(textile.convert(`1 x 2 x 3 = 6`), + `

      1 × 2 × 3 = 6

      `); + t.is(textile.convert(`1x2x3=6`), + `

      1×2×3=6

      `); + t.is(textile.convert(`1x2 x 1x3 = 6`), + `

      1×2 × 1×3 = 6

      `); + t.is(textile.convert(`2' x 2' = 4 sqft.`), + `

      2′ × 2′ = 4 sqft.

      `); + t.is(textile.convert(`2'x 2' = 4 sqft.`), + `

      2′× 2′ = 4 sqft.

      `); + t.is(textile.convert(`2' x2' = 4 sqft.`), + `

      2′ ×2′ = 4 sqft.

      `); + t.is(textile.convert(`2'x2' = 4 sqft.`), + `

      2′×2′ = 4 sqft.

      `); + t.is(textile.convert(`2' X 2' = 4 sqft.`), + `

      2′ × 2′ = 4 sqft.

      `); + t.is(textile.convert(`2'X 2' = 4 sqft.`), + `

      2′× 2′ = 4 sqft.

      `); + t.is(textile.convert(`2' X2' = 4 sqft.`), + `

      2′ ×2′ = 4 sqft.

      `); + t.is(textile.convert(`2'X2' = 4 sqft.`), + `

      2′×2′ = 4 sqft.

      `); + t.is(textile.convert(`2" x 2" = 4 sqin.`), + `

      2″ × 2″ = 4 sqin.

      `); + t.is(textile.convert(`2'4"`), + `

      2′4″

      `); + t.is(textile.convert(`2"x 2" = 4 sqin.`), + `

      2″× 2″ = 4 sqin.

      `); + t.is(textile.convert(`2" x2" = 4 sqin.`), + `

      2″ ×2″ = 4 sqin.

      `); + t.is(textile.convert(`2"x2" = 4 sqin.`), + `

      2″×2″ = 4 sqin.

      `); + t.is(textile.convert(`2" X 2" = 4 sqin.`), + `

      2″ × 2″ = 4 sqin.

      `); + t.is(textile.convert(`2"X 2" = 4 sqin.`), + `

      2″× 2″ = 4 sqin.

      `); + t.is(textile.convert(`2" X2" = 4 sqin.`), + `

      2″ ×2″ = 4 sqin.

      `); + t.is(textile.convert(`2"X2" = 4in[^2^].`), + `

      2″×2″ = 4in2.

      `); + t.is(textile.convert(`What is 1.2 x 3.5?`), + `

      What is 1.2 × 3.5?

      `); + t.is(textile.convert(`What is .2 x .5?`), + `

      What is .2 × .5?

      `, 'What is .2 x .5?'); + t.is(textile.convert(`What is 1.2x3.5?`), + `

      What is 1.2×3.5?

      `); + t.is(textile.convert(`What is .2x.5?`), + `

      What is .2×.5?

      `); + t.is(textile.convert(`What is 1.2' x3.5'?`), + `

      What is 1.2′ ×3.5′?

      `); + t.is(textile.convert(`What is .2"x .5"?`), + `

      What is .2″× .5″?

      `); + t.is(textile.convert(`1 x $10.00 x -£ 1.23 x ¥20,000 x -¤120.00 x ฿1,000,000 x -€110,00`), + `

      1 × $10.00 × -£ 1.23 × ¥20,000 × -¤120.00 × ฿1,000,000 × -€110,00

      `); + t.end(); +}); + +test('Punctuation', t => { + t.is(textile.convert(`Greengrocers' apostrophe's.`), + `

      Greengrocers’ apostrophe’s.

      `); + t.is(textile.convert(`'"I swear it was in '62, captain," replied I.'`), + `

      ‘“I swear it was in ’62, captain,” replied I.’

      `); + t.is(textile.convert(`Dad said; "Mum said: 'It's a beautiful day viz-a-viz a picnic, isn't it?' -- _I think_."`), + `

      Dad said; “Mum said: ‘It’s a beautiful day viz-a-viz a picnic, isn’t it?’ — I think.”

      `); + t.is(textile.convert(`"'I swear it's true, captain,' replied I, 'Here's your list: 2 apples, a banana & a papaya.'"`), + `

      “‘I swear it’s true, captain,’ replied I, ‘Here’s your list: 2 apples, a banana & a papaya.’”

      `); + t.is(textile.convert(`in '88. blah. In the '90s blah. He's in his '90s' now.`), + `

      in ’88. blah. In the ’90s blah. He’s in his ‘90s’ now.

      `); + t.is(textile.convert(`Happened in '89.`), + `

      Happened in ’89.

      `); + t.is(textile.convert(`in '89`), + `

      in ’89

      `); + t.is(textile.convert(`in '89\x20`), + `

      in ’89

      `); + t.is(textile.convert(`Happened in '89. it did.`), + `

      Happened in ’89. it did.

      `); + t.is(textile.convert(`File '1.png'. '1.' '1' '10m' '1.txt'`), + `

      File ‘1.png’. ‘1.’ ‘1’ ‘10m’ ‘1.txt’

      `); + t.is(textile.convert(`NATO(North Atlantic Treaty Organisation)'s pretty big.`), + `

      NATO’s pretty big.

      `); + t.is(textile.convert(`ABC()'s poor knees.`), + `

      ABC’s poor knees.

      `); + t.is(textile.convert(`ABC('s poor knees.`), + `

      ABC(‘s poor knees.

      `); + t.is(textile.convert(`ABC)'s poor knees.`), + `

      ABC)’s poor knees.

      `); + t.is(textile.convert(`Here is a %(example)'spanned'% word.`), + `

      Here is a ‘spanned’ word.

      `); + t.is(textile.convert(`The NHS(National Health Service)' charter states...`), + `

      The NHS’ charter states…

      `); + t.end(); +}); + +test('Dashes and ellipsis', t => { + t.is(textile.convert(`You know the Italian proverb -- Chi ha compagno ha padrone.`), + `

      You know the Italian proverb — Chi ha compagno ha padrone.

      `); + t.is(textile.convert(`You know the Italian proverb--Chi ha compagno ha padrone.`), + `

      You know the Italian proverb—Chi ha compagno ha padrone.

      `); + t.is(textile.convert(`You know the Italian proverb - Chi ha compagno ha padrone.`), + `

      You know the Italian proverb – Chi ha compagno ha padrone.

      `); + t.is(textile.convert(`You know the Italian proverb-Chi ha compagno ha padrone.`), + `

      You know the Italian proverb-Chi ha compagno ha padrone.

      `); + t.is(textile.convert(`You know the Italian proverb... Chi ha compagno ha padrone.`), + `

      You know the Italian proverb… Chi ha compagno ha padrone.

      `); + t.is(textile.convert(`You know the Italian proverb...Chi ha compagno ha padrone.`), + `

      You know the Italian proverb…Chi ha compagno ha padrone.

      `); + t.end(); +}); + +test('Tricky Open Quotes...', t => { + t.is(textile.convert(`citation ["(Berk.) Hilton"], see`), + `

      citation [“(Berk.) Hilton”], see

      `); + t.is(textile.convert(`[Papers "blah blah."]`), + `

      [Papers “blah blah.”]

      `); + t.is(textile.convert(`Hello ("Mum")...`), + `

      Hello (“Mum”)…

      `); + t.is(textile.convert(`Hello ["(mum) & dad"], see...`), + `

      Hello [“(mum) & dad”], see…

      `); + t.is(textile.convert(`Hello ("[mum] & dad"), see...`), + `

      Hello (“[mum] & dad”), see…

      `); + t.is(textile.convert(`Hello {"(mum) & dad"}, see...`), + `

      Hello {“(mum) & dad”}, see…

      `); + t.is(textile.convert(`["Well, well (well)"] ...`), + `

      [“Well, well (well)”] …

      `); + t.is(textile.convert(`citation ['(Berk.) Hilton'], see`), + `

      citation [‘(Berk.) Hilton’], see

      `); + t.is(textile.convert(`[Papers "blah blah."]`), + `

      [Papers “blah blah.”]

      `); + t.is(textile.convert(`Hello ('Mum')...`), + `

      Hello (‘Mum’)…

      `); + t.is(textile.convert(`Hello ['(mum) & dad'], see...`), + `

      Hello [‘(mum) & dad’], see…

      `); + t.is(textile.convert(`Hello ('[mum] & dad'), see...`), + `

      Hello (‘[mum] & dad’), see…

      `); + t.is(textile.convert(`Hello {'(mum) & dad'}, see...`), + `

      Hello {‘(mum) & dad’}, see…

      `); + t.is(textile.convert(`['Well, well (well)'] ...`), + `

      [‘Well, well (well)’] …

      `); + t.end(); +}); diff --git a/test/instiki.js b/test/instiki.js index 9d11287..cb7ba51 100644 --- a/test/instiki.js +++ b/test/instiki.js @@ -54,10 +54,10 @@ test('instiki:6', t => { `

      Version History

        \t
      • Version
        -0.0
        – Early version using MD5 hashes.
      • +0.0 – Early version using MD5 hashes. \t
      • Version
        -0.1
        – First cut of new system. Much cleaner.
      • -\t
      • Version 0.2 – Fixed problem with “authors” page and some tests.
      • +0.1 – First cut of new system. Much cleaner. +\t
      • Version 0.2 – Fixed problem with “authors” page and some tests.
      `, tx); t.end(); }); @@ -66,7 +66,7 @@ test('instiki:6', t => { test('instiki:7', t => { const tx = '--richSeymour --whyTheLuckyStiff'; t.is(textile.convert(tx), - '

      —richSeymour —whyTheLuckyStiff

      ', tx); + '

      —richSeymour —whyTheLuckyStiff

      ', tx); t.end(); }); diff --git a/test/jstextile.js b/test/jstextile.js index eab0a68..1a9e407 100644 --- a/test/jstextile.js +++ b/test/jstextile.js @@ -11,7 +11,7 @@ test('HTML blockquote spanning paragraphs', t => { '

      A line break delimited block quote:

      \n' + '
      \n' + '

      How unbearable at times are people who are happy, people for whom everything works out.

      \n' + - '

      Anton Pavlovich Chekhov – 1860-1904

      \n' + + '

      Anton Pavlovich Chekhov – 1860-1904

      \n' + '
      '); t.end(); }); @@ -65,7 +65,7 @@ test('Span with an ending percentage', t => { test('Arrow glyph', t => { - t.is(textile.convert('-> arrow'), '

      → arrow

      '); + t.is(textile.convert('-> arrow'), '

      → arrow

      '); t.end(); }); @@ -88,14 +88,14 @@ test('Simple table with tailing space', t => { test('clean trademarks #1', t => { t.is(textile.convert('(TM) and (tm), but not (Tm) or (tM)'), - '

      ™ and ™, but not (Tm) or (tM)

      '); + '

      ™ and ™, but not (Tm) or (tM)

      '); t.end(); }); test('clean trademarks #3', t => { t.is(textile.convert('(TM) and [TM], but not (TM] or [TM)'), - '

      ™ and ™, but not (TM] or [TM)

      '); + '

      ™ and ™, but not (TM] or [TM)

      '); t.end(); }); @@ -499,14 +499,14 @@ test('support unicode symbols (#27)', t => { 'Three quarters (3/4) symbol\n' + 'Degree (o) symbol\n' + 'Plus/minus (+/-) symbol'), - '

      Trademark™
      \n' + - 'Registered®
      \n' + - 'Copyright © 2008
      \n' + - 'One quarter ¼ symbol
      \n' + - 'One half ½ symbol
      \n' + - 'Three quarters ¾ symbol
      \n' + - 'Degree ° symbol
      \n' + - 'Plus/minus ± symbol

      '); + '

      Trademark™
      \n' + + 'Registered®
      \n' + + 'Copyright © 2008
      \n' + + 'One quarter ¼ symbol
      \n' + + 'One half ½ symbol
      \n' + + 'Three quarters ¾ symbol
      \n' + + 'Degree ° symbol
      \n' + + 'Plus/minus ± symbol

      '); t.end(); }); @@ -680,7 +680,7 @@ test('link alias work in HTML tags', t => { test('correct glyph convertion', t => { t.is(textile.convert('p. foo -- bar _foo ==foo -- bar== bar_ @foo -- bar@\n\nnotextile. foo -- bar'), - '

      foo — bar foo foo -- bar bar foo -- bar

      \nfoo -- bar'); + '

      foo — bar foo foo -- bar bar foo -- bar

      \nfoo -- bar'); t.end(); }); diff --git a/test/linebreaks.js b/test/linebreaks.js index 7138b08..bfebdee 100644 --- a/test/linebreaks.js +++ b/test/linebreaks.js @@ -42,7 +42,7 @@ When the elephant comes to take a p. you...`; t.is(textile.convert(tx), `

      I saw a ship. It ate my elephant.

      -

      When the elephant comes to take a p. you…

      +

      When the elephant comes to take a p. you…

      `, tx); t.end(); }); diff --git a/test/links.js b/test/links.js index 9ed24ec..1e344c9 100644 --- a/test/links.js +++ b/test/links.js @@ -423,7 +423,7 @@ test('links:52', t => { test('links:53', t => { const tx = '"testing":'; t.is(textile.convert(tx), - '

      “testing”:

      ', tx); + '

      “testing”:

      ', tx); t.end(); }); @@ -495,7 +495,7 @@ test('link containing parentheses', t => { test('link containing quotes', t => { const tx = '"He said it is "very unlikely" this works":http://slashdot.org/'; t.is(textile.convert(tx), - '

      He said it is “very unlikely” this works

      ', tx); + '

      He said it is “very unlikely” this works

      ', tx); t.end(); }); @@ -503,7 +503,7 @@ test('link containing quotes', t => { test('link containing multiple quotes', t => { const tx = '"He said it is "very unlikely" the "economic stimulus" works":http://slashdot.org/'; t.is(textile.convert(tx), - '

      He said it is “very unlikely” the “economic stimulus” works

      ', tx); + '

      He said it is “very unlikely” the “economic stimulus” works

      ', tx); t.end(); }); @@ -511,7 +511,7 @@ test('link containing multiple quotes', t => { test('linked quoted phrase', t => { const tx = '""Open the pod bay doors please, HAL."":http://www.youtube.com/watch?v=npN9l2Bd06s'; t.is(textile.convert(tx), - '

      “Open the pod bay doors please, HAL.”

      ', tx); + '

      “Open the pod bay doors please, HAL.”

      ', tx); t.end(); }); @@ -519,7 +519,7 @@ test('linked quoted phrase', t => { test('link following quoted phrase', t => { const tx = '"quote" text "quote" text "link":http://google.com'; t.is(textile.convert(tx), - '

      “quote” text “quote” text link

      ', tx); + '

      “quote” text “quote” text link

      ', tx); t.end(); }); @@ -583,7 +583,7 @@ test('links containing parentheses without brackets inside a parenthesis', t => test('quotes and follow link', t => { const tx = 'Some "text" followed by a "link":http://redcloth.org.'; t.is(textile.convert(tx), - '

      Some “text” followed by a link.

      ', tx); + '

      Some “text” followed by a link.

      ', tx); t.end(); }); @@ -603,8 +603,8 @@ test('contained in multi-paragraph quotes', t => { "It's wonderful."`; t.is(textile.convert(tx), - `

      “I first learned about Redcloth several years ago.

      -

      “It’s wonderful.”

      `, tx); + `

      “I first learned about Redcloth several years ago.

      +

      “It’s wonderful.”

      `, tx); t.end(); }); @@ -614,8 +614,8 @@ test('as html in notextile contained in multi-paragraph quotes', t => { "I like links."`; t.is(textile.convert(tx), - `

      “Here is a link.

      -

      “I like links.”

      `, tx); + `

      “Here is a link.

      +

      “I like links.”

      `, tx); t.end(); }); @@ -623,7 +623,7 @@ test('as html in notextile contained in multi-paragraph quotes', t => { test('contained in para with multiple quotes', t => { const tx = '"My wife, Tipper, and I will donate 100% of the proceeds of the award to the "Alliance For Climate Protection":http://www.looktothestars.org/charity/638-alliance-for-climate-protection," said Gore in an email. "I am deeply honored to receive the Nobel Peace Prize."'; t.is(textile.convert(tx), - '

      “My wife, Tipper, and I will donate 100% of the proceeds of the award to the Alliance For Climate Protection,” said Gore in an email. “I am deeply honored to receive the Nobel Peace Prize.”

      ', tx); + '

      “My wife, Tipper, and I will donate 100% of the proceeds of the award to the Alliance For Climate Protection,” said Gore in an email. “I am deeply honored to receive the Nobel Peace Prize.”

      ', tx); t.end(); }); diff --git a/test/poignant.js b/test/poignant.js index d810d06..d80a689 100644 --- a/test/poignant.js +++ b/test/poignant.js @@ -51,18 +51,18 @@ Now that you've met @false@, I'm sure you can see what's on next.`; print "Plastic cup is on the up 'n' up!" end -

      If plastic_cup contains either nil or false, you won’t see anything print to the screen. They’re not on the if guest list. So if isn’t going to run any of the code it’s protecting.

      +

      If plastic_cup contains either nil or false, you won’t see anything print to the screen. They’re not on the if guest list. So if isn’t going to run any of the code it’s protecting.

      But nil and false need not walk away in shame. They may be of questionable character, but unless runs a smaller establishment that caters to the bedraggled. The unless keyword has a policy of only allowing those with a negative charge in. Who are: nil and false.

         unless plastic_cup
           print "Plastic cup is on the down low."
         end
       
      -

      You can also use if and unless at the end of a single line of code, if that’s all that is being protected.

      +

      You can also use if and unless at the end of a single line of code, if that’s all that is being protected.

         print "Yeah, plastic cup is up again!" if plastic_cup
         print "Hardly. It's down." unless plastic_cup
       
      -

      Now that you’ve met false, I’m sure you can see what’s on next.

      `, tx); +

      Now that you’ve met false, I’m sure you can see what’s on next.

      `, tx); t.end(); }); diff --git a/test/source-offsets.js b/test/source-offsets.js index e7c8dfc..9f9b747 100644 --- a/test/source-offsets.js +++ b/test/source-offsets.js @@ -674,7 +674,7 @@ test('link', t => { ); t.end(); }); - +/* test('endnotes', t => { t.deepEqual( parse('[#a] [#b]\n\nnote#a. foo\n\nnotelist.'), @@ -712,3 +712,4 @@ test('endnotes', t => { ); t.end(); }); +*/ diff --git a/test/textism.js b/test/textism.js index a5a3df1..ee96be0 100644 --- a/test/textism.js +++ b/test/textism.js @@ -135,7 +135,7 @@ test('textism:13', t => { test('textism:14', t => { const tx = "Nabokov's ??Pnin??"; t.is(textile.convert(tx), - '

      Nabokov’s Pnin

      ', tx); + '

      Nabokov’s Pnin

      ', tx); t.end(); }); @@ -407,9 +407,9 @@ Multi-level list: t.is(textile.convert(tx), `

      This is a title

      This is a subhead

      -

      This is some text of dubious character. Isn’t the use of “quotes” just lazy writing — and theft of ‘intellectual property’ besides? I think the time has come to see a block quote.

      +

      This is some text of dubious character. Isn’t the use of “quotes” just lazy writing — and theft of ‘intellectual property’ besides? I think the time has come to see a block quote.

      -

      This is a block quote. I’ll admit it’s not the most exciting block quote ever devised.

      +

      This is a block quote. I’ll admit it’s not the most exciting block quote ever devised.

      Simple list:

        diff --git a/test/threshold.js b/test/threshold.js index e33864a..51d653b 100644 --- a/test/threshold.js +++ b/test/threshold.js @@ -26,7 +26,7 @@ a line break.

        `, tx); test('xhtml tags', t => { const tx = "Here's some bold text."; t.is(textile.convert(tx), - '

        Here’s some bold text.

        ', tx); + '

        Here’s some bold text.

        ', tx); t.end(); }); @@ -42,7 +42,7 @@ test('no paragraph tags', t => { test('smart quotes', t => { const tx = '"Proceed!" said he to the host.'; t.is(textile.convert(tx), - '

        “Proceed!” said he to the host.

        ', tx); + '

        “Proceed!” said he to the host.

        ', tx); t.end(); }); @@ -50,7 +50,7 @@ test('smart quotes', t => { test('smart quotes 2', t => { const tx = "'Proceed!' said he to the host."; t.is(textile.convert(tx), - '

        ‘Proceed!’ said he to the host.

        ', tx); + '

        ‘Proceed!’ said he to the host.

        ', tx); t.end(); }); @@ -58,7 +58,7 @@ test('smart quotes 2', t => { test('nested quotation marks', t => { const tx = "\"'I swear, captain,' replied I.\""; t.is(textile.convert(tx), - '

        “‘I swear, captain,’ replied I.”

        ', tx); + '

        “‘I swear, captain,’ replied I.”

        ', tx); t.end(); }); @@ -66,7 +66,7 @@ test('nested quotation marks', t => { test('nested quotation marks 2', t => { const tx = "'\"I swear, captain,\" replied I.'"; t.is(textile.convert(tx), - '

        ‘“I swear, captain,” replied I.’

        ', tx); + '

        ‘“I swear, captain,” replied I.’

        ', tx); t.end(); }); @@ -74,7 +74,7 @@ test('nested quotation marks 2', t => { test('apostrophe glyphs', t => { const tx = "Greengrocers' apostrophe's."; t.is(textile.convert(tx), - '

        Greengrocers’ apostrophe’s.

        ', tx); + '

        Greengrocers’ apostrophe’s.

        ', tx); t.end(); }); @@ -82,7 +82,7 @@ test('apostrophe glyphs', t => { test('em-dash glyphs', t => { const tx = 'You know the Italian proverb -- Chi ha compagno ha padrone.'; t.is(textile.convert(tx), - '

        You know the Italian proverb — Chi ha compagno ha padrone.

        ', tx); + '

        You know the Italian proverb — Chi ha compagno ha padrone.

        ', tx); t.end(); }); @@ -90,7 +90,7 @@ test('em-dash glyphs', t => { test('em-dash glyphs 2', t => { const tx = 'You know the Italian proverb--Chi ha compagno ha padrone.'; t.is(textile.convert(tx), - '

        You know the Italian proverb—Chi ha compagno ha padrone.

        ', tx); + '

        You know the Italian proverb—Chi ha compagno ha padrone.

        ', tx); t.end(); }); @@ -98,7 +98,7 @@ test('em-dash glyphs 2', t => { test('en-dash glyphs', t => { const tx = 'You know the Italian proverb - Chi ha compagno ha padrone.'; t.is(textile.convert(tx), - '

        You know the Italian proverb – Chi ha compagno ha padrone.

        ', tx); + '

        You know the Italian proverb – Chi ha compagno ha padrone.

        ', tx); t.end(); }); @@ -106,7 +106,7 @@ test('en-dash glyphs', t => { test('ellipsis character', t => { const tx = 'Meanwhile...'; t.is(textile.convert(tx), - '

        Meanwhile…

        ', tx); + '

        Meanwhile…

        ', tx); t.end(); }); @@ -114,7 +114,7 @@ test('ellipsis character', t => { test('dimension character', t => { const tx = '1 x 2 x 3 = 6'; t.is(textile.convert(tx), - '

        1 × 2 × 3 = 6

        ', tx); + '

        1 × 2 × 3 = 6

        ', tx); t.end(); }); @@ -122,7 +122,7 @@ test('dimension character', t => { test('dimension character 2', t => { const tx = '1x2x3 = 6'; t.is(textile.convert(tx), - '

        1×2×3 = 6

        ', tx); + '

        1×2×3 = 6

        ', tx); t.end(); }); @@ -130,7 +130,7 @@ test('dimension character 2', t => { test('trademark register copyright', t => { const tx = 'Registered(r) Trademark(tm) Copyright (c).'; t.is(textile.convert(tx), - '

        Registered® Trademark™ Copyright ©.

        ', tx); + '

        Registered® Trademark™ Copyright ©.

        ', tx); t.end(); }); @@ -261,7 +261,7 @@ test('link alias', t => { [tstate]http://thresholdstate.com/`; t.is(textile.convert(tx), - `

        Here’s a link, and
        + `

        Here’s a link, and
        another link to the same site.

        `, tx); t.end(); }); @@ -590,7 +590,7 @@ test('paragraphs with inline xhtml', t => { test('paragraphs with inline xhtml 2', t => { const tx = "I'll make my own way."; t.is(textile.convert(tx), - '

        I’ll make my own way.

        ', tx); + '

        I’ll make my own way.

        ', tx); t.end(); }); @@ -944,7 +944,7 @@ test('row span', t => { test('whitespace required', t => { const tx = "this*won't*work"; t.is(textile.convert(tx), - '

        this*won’t*work

        ', tx); + '

        this*won’t*work

        ', tx); t.end(); }); From fa800f51413e2a7f013c9ef722a78c1a4fb6f466 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sat, 12 Jun 2021 10:48:03 +0000 Subject: [PATCH 29/35] Updated package dependencies --- package-lock.json | 1335 ++++++++++++++++++++++++--------------------- package.json | 18 +- 2 files changed, 721 insertions(+), 632 deletions(-) diff --git a/package-lock.json b/package-lock.json index 44ae522..409c003 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,50 +14,41 @@ } }, "@babel/compat-data": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", - "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", "dev": true }, "@babel/core": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.13.tgz", - "integrity": "sha512-1xEs9jZAyKIouOoCmpsgk/I26PoKyvzQ2ixdRpRzfbcp1fL+ozw7TUgdDgwonbTovqRaTfRh50IXuw4QrWO0GA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.12", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", "semver": "^6.3.0", "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "requires": { - "@babel/types": "^7.13.0", + "@babel/types": "^7.14.2", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -82,42 +73,35 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", - "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.12", + "@babel/compat-data": "^7.14.4", "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", - "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz", + "integrity": "sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-replace-supers": "^7.14.4", "@babel/helper-split-export-declaration": "^7.12.13" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", + "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", @@ -125,9 +109,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.13.0", @@ -138,14 +122,6 @@ "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "@babel/helper-explode-assignable-expression": { @@ -158,14 +134,14 @@ } }, "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.12.13", "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.2" } }, "@babel/helper-get-function-arity": { @@ -178,13 +154,13 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", - "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dev": true, "requires": { - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" } }, "@babel/helper-member-expression-to-functions": { @@ -206,19 +182,19 @@ } }, "@babel/helper-module-transforms": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz", - "integrity": "sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "@babel/helper-optimise-call-expression": { @@ -248,15 +224,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.4" } }, "@babel/helper-simple-access": { @@ -287,9 +263,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, "@babel/helper-validator-option": { @@ -311,31 +287,31 @@ } }, "@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "requires": { "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { @@ -350,9 +326,9 @@ } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", - "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", + "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -370,10 +346,21 @@ "@babel/helper-plugin-utils": "^7.13.0" } }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", + "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.3", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + } + }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", + "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -381,19 +368,19 @@ } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", + "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", + "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -401,9 +388,9 @@ } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", + "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -411,9 +398,9 @@ } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", + "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -421,32 +408,32 @@ } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", + "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz", + "integrity": "sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", + "@babel/compat-data": "^7.14.4", + "@babel/helper-compilation-targets": "^7.14.4", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" + "@babel/plugin-transform-parameters": "^7.14.2" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", + "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -454,9 +441,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", + "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -474,6 +461,18 @@ "@babel/helper-plugin-utils": "^7.13.0" } }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + } + }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", @@ -502,6 +501,15 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -583,6 +591,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, "@babel/plugin-syntax-top-level-await": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", @@ -622,25 +639,25 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", - "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz", + "integrity": "sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz", + "integrity": "sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-replace-supers": "^7.14.4", "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" } @@ -655,9 +672,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", - "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz", + "integrity": "sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" @@ -730,25 +747,25 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", + "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.2", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", - "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-simple-access": "^7.13.12", "babel-plugin-dynamic-import-node": "^2.3.3" } }, @@ -766,12 +783,12 @@ } }, "@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0" } }, @@ -804,9 +821,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" @@ -822,9 +839,9 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", - "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" @@ -905,31 +922,34 @@ } }, "@babel/preset-env": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", - "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.4.tgz", + "integrity": "sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.12", - "@babel/helper-compilation-targets": "^7.13.10", + "@babel/compat-data": "^7.14.4", + "@babel/helper-compilation-targets": "^7.14.4", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-option": "^7.12.17", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.8", + "@babel/plugin-proposal-async-generator-functions": "^7.14.2", "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-dynamic-import": "^7.13.8", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-class-static-block": "^7.14.3", + "@babel/plugin-proposal-dynamic-import": "^7.14.2", + "@babel/plugin-proposal-export-namespace-from": "^7.14.2", + "@babel/plugin-proposal-json-strings": "^7.14.2", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", + "@babel/plugin-proposal-numeric-separator": "^7.14.2", + "@babel/plugin-proposal-object-rest-spread": "^7.14.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", + "@babel/plugin-proposal-optional-chaining": "^7.14.2", "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -939,14 +959,15 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", "@babel/plugin-syntax-top-level-await": "^7.12.13", "@babel/plugin-transform-arrow-functions": "^7.13.0", "@babel/plugin-transform-async-to-generator": "^7.13.0", "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-block-scoping": "^7.14.4", + "@babel/plugin-transform-classes": "^7.14.4", "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.14.4", "@babel/plugin-transform-dotall-regex": "^7.12.13", "@babel/plugin-transform-duplicate-keys": "^7.12.13", "@babel/plugin-transform-exponentiation-operator": "^7.12.13", @@ -954,16 +975,16 @@ "@babel/plugin-transform-function-name": "^7.12.13", "@babel/plugin-transform-literals": "^7.12.13", "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.13.0", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-amd": "^7.14.2", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-modules-umd": "^7.14.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", "@babel/plugin-transform-new-target": "^7.12.13", "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-parameters": "^7.14.2", "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", "@babel/plugin-transform-reserved-words": "^7.12.13", "@babel/plugin-transform-shorthand-properties": "^7.12.13", "@babel/plugin-transform-spread": "^7.13.0", @@ -973,20 +994,12 @@ "@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.12", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", + "@babel/types": "^7.14.4", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", "core-js-compat": "^3.9.0", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "@babel/preset-modules": { @@ -1003,13 +1016,13 @@ } }, "@babel/register": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.8.tgz", - "integrity": "sha512-yCVtABcmvQjRsX2elcZFUV5Q5kDDpHdtXKKku22hNDma60lYuhKmtp1ykZ/okRCPLT2bR5S+cA1kvtBdAFlDTQ==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", + "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", "dev": true, "requires": { + "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", - "lodash": "^4.17.19", "make-dir": "^2.1.0", "pirates": "^4.0.0", "source-map-support": "^0.5.16" @@ -1036,54 +1049,53 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.13.tgz", - "integrity": "sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, "@borgar/eslint-config": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@borgar/eslint-config/-/eslint-config-2.1.0.tgz", - "integrity": "sha512-EqQgsGtxPD0oiT8J/uc0ExDiDX8NsAKzhCoZ9OWsLrNjirxiylwBue/ucF3zXZUcHZjpK9wmADL79uqSgo7qEw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@borgar/eslint-config/-/eslint-config-2.2.1.tgz", + "integrity": "sha512-wv2RXjDCiD91XYx4Csgs90Hrsf7ncq2abWktO0Lprb8By6t0iYNeizrLd69OO49I0vsYdv1rLXPu+V0Bzl8dlg==", "dev": true }, "@discoveryjs/json-ext": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", - "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", + "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", "dev": true }, "@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", @@ -1092,13 +1104,19 @@ }, "dependencies": { "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, @@ -1164,9 +1182,9 @@ "dev": true }, "@types/eslint": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.7.tgz", - "integrity": "sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q==", + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", + "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", "dev": true, "requires": { "@types/estree": "*", @@ -1184,9 +1202,9 @@ } }, "@types/estree": { - "version": "0.0.46", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", - "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", "dev": true }, "@types/json-schema": { @@ -1202,9 +1220,9 @@ "dev": true }, "@types/node": { - "version": "14.14.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", + "version": "15.12.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz", + "integrity": "sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==", "dev": true }, "@webassemblyjs/ast": { @@ -1354,24 +1372,24 @@ } }, "@webpack-cli/configtest": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz", - "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", + "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", "dev": true }, "@webpack-cli/info": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz", - "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", + "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz", - "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", + "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", "dev": true }, "@xtuc/ieee754": { @@ -1628,41 +1646,33 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", - "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.0", - "@babel/helper-define-polyfill-provider": "^0.1.5", + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz", + "integrity": "sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.9.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", - "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5" + "@babel/helper-define-polyfill-provider": "^0.2.2" } }, "balanced-match": { @@ -1688,16 +1698,16 @@ } }, "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "node-releases": "^1.1.71" } }, "buffer-from": { @@ -1758,9 +1768,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001204", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz", - "integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==", + "version": "1.0.30001234", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001234.tgz", + "integrity": "sha512-a3gjUVKkmwLdNysa1xkUAwN2VfJUJyVW47rsi3aCbkRCtbHAfo+rOsCqVw29G6coQ8gzAPb5XBXwiGHwme3isA==", "dev": true }, "chalk": { @@ -1775,13 +1785,10 @@ } }, "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true }, "clean-stack": { "version": "2.2.0", @@ -1850,12 +1857,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", @@ -1866,12 +1867,12 @@ } }, "core-js-compat": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz", - "integrity": "sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.13.1.tgz", + "integrity": "sha512-mdrcxc0WznfRd8ZicEZh1qVeJ2mu6bwQFh8YVUK48friy/FOwFV5EJj9/dlh+nMQ74YusdVfBFDuomKgUspxWQ==", "dev": true, "requires": { - "browserslist": "^4.16.3", + "browserslist": "^4.16.6", "semver": "7.0.0" }, "dependencies": { @@ -2027,9 +2028,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.701", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.701.tgz", - "integrity": "sha512-Zd9ofdIMYHYhG1gvnejQDvC/kqSeXQvtXF0yRURGxgwGqDZm9F9Fm3dYFnm5gyuA7xpXfBlzVLN1sz0FjxpKfw==", + "version": "1.3.749", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz", + "integrity": "sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A==", "dev": true }, "emoji-regex": { @@ -2045,9 +2046,9 @@ "dev": true }, "enhanced-resolve": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", - "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -2072,9 +2073,9 @@ } }, "envinfo": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", - "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, "error-ex": { @@ -2212,28 +2213,30 @@ "dev": true }, "eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -2242,7 +2245,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -2251,7 +2254,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -2265,58 +2268,23 @@ "@babel/highlight": "^7.10.4" } }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } + "color-convert": "^2.0.1" } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "color-convert": { @@ -2334,10 +2302,16 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "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==", + "dev": true + }, "globals": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz", - "integrity": "sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==", + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -2349,21 +2323,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -2373,17 +2332,20 @@ "lru-cache": "^6.0.0" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -2415,22 +2377,22 @@ } }, "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", + "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", "dev": true, "requires": { - "debug": "^2.6.9", + "debug": "^3.2.7", "pkg-dir": "^2.0.0" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "find-up": { @@ -2452,12 +2414,6 @@ "path-exists": "^3.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -2494,23 +2450,25 @@ } }, "eslint-plugin-import": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", - "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "version": "2.23.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", + "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", "dev": true, "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", "debug": "^2.6.9", - "doctrine": "1.5.0", + "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", + "eslint-module-utils": "^2.6.1", + "find-up": "^2.0.0", "has": "^1.0.3", + "is-core-module": "^2.4.0", "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", + "object.values": "^1.1.3", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", "tsconfig-paths": "^3.9.0" }, "dependencies": { @@ -2524,13 +2482,40 @@ } }, "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "ms": { @@ -2538,6 +2523,30 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true } } }, @@ -2569,9 +2578,9 @@ } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "espree": { @@ -2658,9 +2667,9 @@ "dev": true }, "execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -2735,17 +2744,6 @@ "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "flatted": { @@ -2841,9 +2839,9 @@ "dev": true }, "get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "glob": { @@ -2931,9 +2929,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "html-escaper": { @@ -3236,12 +3234,6 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3403,14 +3395,14 @@ } }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", + "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" }, "dependencies": { "has-flag": { @@ -3420,9 +3412,9 @@ "dev": true }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -3496,21 +3488,21 @@ } }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", + "parse-json": "^4.0.0", + "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "dependencies": { "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } @@ -3553,10 +3545,10 @@ "path-exists": "^3.0.0" } }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, "lodash.debounce": { @@ -3571,6 +3563,35 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -3579,6 +3600,14 @@ "requires": { "pify": "^4.0.1", "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "merge-stream": { @@ -3588,18 +3617,18 @@ "dev": true }, "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "dev": true }, "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dev": true, "requires": { - "mime-db": "1.46.0" + "mime-db": "1.48.0" } }, "mimic-fn": { @@ -3667,9 +3696,9 @@ } }, "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", "dev": true }, "normalize-package-data": { @@ -3682,6 +3711,14 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "npm-run-path": { @@ -3871,15 +3908,74 @@ } }, "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.18.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + } } }, "once": { @@ -3969,12 +4065,13 @@ } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "parse-ms": { @@ -4008,18 +4105,18 @@ "dev": true }, "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "^2.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } @@ -4048,6 +4145,60 @@ "find-up": "^3.0.0" } }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4094,24 +4245,24 @@ } }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "^2.0.0", + "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "path-type": "^3.0.0" } }, "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "read-pkg": "^3.0.0" }, "dependencies": { "find-up": { @@ -4320,6 +4471,15 @@ "through": "~2.3.4" } }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4338,9 +4498,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "serialize-javascript": { @@ -4533,9 +4693,9 @@ } }, "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true }, "sprintf-js": { @@ -4632,21 +4792,23 @@ } }, "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ajv": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", - "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -4786,9 +4948,9 @@ } }, "terser": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", - "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", "dev": true, "requires": { "commander": "^2.20.0", @@ -4805,17 +4967,17 @@ } }, "terser-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", + "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", "dev": true, "requires": { - "jest-worker": "^26.6.2", + "jest-worker": "^27.0.2", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^5.5.1" + "terser": "^5.7.0" }, "dependencies": { "p-limit": { @@ -4887,12 +5049,6 @@ } } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5003,9 +5159,9 @@ } }, "watchpack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", - "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -5013,22 +5169,22 @@ } }, "webpack": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz", - "integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==", + "version": "5.38.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", + "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.46", + "@types/estree": "^0.0.47", "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", + "acorn": "^8.2.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.7.0", + "enhanced-resolve": "^5.8.0", "es-module-lexer": "^0.4.0", - "eslint-scope": "^5.1.1", + "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.4", @@ -5039,14 +5195,14 @@ "schema-utils": "^3.0.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" }, "dependencies": { "acorn": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", - "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", "dev": true }, "graceful-fs": { @@ -5054,106 +5210,21 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "terser": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", - "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", - "dev": true, - "requires": { - "jest-worker": "^26.6.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.5.1" - } - }, - "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } } } }, "webpack-cli": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", - "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", + "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.2", - "@webpack-cli/info": "^1.2.3", - "@webpack-cli/serve": "^1.3.1", + "@webpack-cli/configtest": "^1.0.3", + "@webpack-cli/info": "^1.2.4", + "@webpack-cli/serve": "^1.4.0", "colorette": "^1.2.1", "commander": "^7.0.0", - "enquirer": "^2.3.6", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", @@ -5181,6 +5252,24 @@ "wildcard": "^2.0.0" } }, + "webpack-sources": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 65fbdbc..b6859ad 100644 --- a/package.json +++ b/package.json @@ -37,18 +37,18 @@ ], "license": "MIT", "devDependencies": { - "@babel/core": "~7.13.13", - "@babel/preset-env": "~7.13.12", - "@babel/register": "~7.13.8", - "@borgar/eslint-config": "~2.1.0", + "@babel/core": "~7.14.3", + "@babel/preset-env": "~7.14.4", + "@babel/register": "~7.13.16", + "@borgar/eslint-config": "~2.2.1", "babel-loader": "~8.2.2", - "eslint": "~7.23.0", - "eslint-plugin-import": "~2.22.1", + "eslint": "~7.28.0", + "eslint-plugin-import": "~2.23.4", "nyc": "~15.1.0", "tap-min": "~2.0.0", "tape": "~5.2.2", - "terser-webpack-plugin": "~5.1.1", - "webpack": "~5.28.0", - "webpack-cli": "~4.6.0" + "terser-webpack-plugin": "~5.1.3", + "webpack": "~5.38.1", + "webpack-cli": "~4.7.0" } } From 8e51d777b67e75d21ed9ac3a1b71f470ce7acc2d Mon Sep 17 00:00:00 2001 From: Borgar Date: Sat, 12 Jun 2021 10:52:14 +0000 Subject: [PATCH 30/35] Remove npm commands that don't do anything --- package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/package.json b/package.json index b6859ad..a16dfda 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,7 @@ "dev": "nodemon -w test -w src -x 'tape -r @babel/register 'test/*.js'|tap-min'", "test": "tape -r @babel/register 'test/*js' | tap-min", "lint": "eslint src/ test/", - "coverage": "nyc --reporter html --reporter text tape -r @babel/register test/*js", - "pub": "node scripts/publish.js", - "dingus": "node scripts/updatedingus.js" + "coverage": "nyc --reporter html --reporter text tape -r @babel/register test/*js" }, "main": "./lib/textile.js", "bin": "./bin/textile", From 308c3f5b5309e71ebdde09963e9062974a714fe1 Mon Sep 17 00:00:00 2001 From: Borgar Date: Sun, 6 Aug 2023 17:11:26 +0000 Subject: [PATCH 31/35] Don't inline-linebreak if whitespace follows the newline Closes #88 --- src/textile/inline.js | 3 ++- test/linebreaks.js | 28 +++++++++++++++++++++++++++- test/lists.js | 20 ++++++++++++++++++-- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/textile/inline.js b/src/textile/inline.js index 03ca8aa..6f46eb6 100644 --- a/src/textile/inline.js +++ b/src/textile/inline.js @@ -64,7 +64,8 @@ export function parseInline (src, options) { if (haveCR) { src.advance(1); // skip cartridge returns } - if (src.startsWith('\n')) { + // breaks should be added if next line does not start with a whitespace + if (src.startsWith('\n') && !/^\n[ \f\r\t\v\xA0\u2028\u2029]/.test(src)) { if (options.breaks) { root.appendChild(new Element('br').setPos(src.offset - haveCR, haveCR ? 2 : 1)); } diff --git a/test/linebreaks.js b/test/linebreaks.js index bfebdee..1a1adf7 100644 --- a/test/linebreaks.js +++ b/test/linebreaks.js @@ -24,7 +24,7 @@ This is line two`; }); -test('blocks with tabl on the blank line in between', t => { +test('blocks with tab on the blank line in between', t => { const tx = `This is line one\r \t\r This is line two`; @@ -104,6 +104,32 @@ And none replied.

        `, tx); t.end(); }); +test('line breaks do not appear for indented lines', t => { + const tx = `* Item number 1 in\r +two lines\r +* Item number 2 in\r + two lines\r +\r +para one\r +line two\r +\r +para two\r + line two\r +`; + t.is(textile.convert(tx), + `
          +\t
        • Item number 1 in
          +two lines
        • +\t
        • Item number 2 in + two lines
        • +
        +

        para one
        +line two

        +

        para two + line two

        `, tx); + t.end(); +}); + test('blockquote', t => { const tx = `Any old text\r diff --git a/test/lists.js b/test/lists.js index 7ff2e4f..4eaa434 100644 --- a/test/lists.js +++ b/test/lists.js @@ -12,15 +12,31 @@ test('code in bullet list', t => { }); -test('hard break in list', t => { +test('hard break in list (1)', t => { const tx = `* first line * second - line +line * third line`; t.is(textile.convert(tx), `
          \t
        • first line
        • \t
        • second
          +line
        • +\t
        • third line
        • +
        `, tx); + t.end(); +}); + + +test('hard break in list (2)', t => { + const tx = `* first line +* second + line +* third line`; + t.is(textile.convert(tx), + `
          +\t
        • first line
        • +\t
        • second line
        • \t
        • third line
        `, tx); From fa68982bb87fe41984a64c96b305fe07a1dfd7c7 Mon Sep 17 00:00:00 2001 From: Borgar Date: Thu, 7 Sep 2023 16:50:38 +0000 Subject: [PATCH 32/35] Add _* to npmignore --- .npmignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.npmignore b/.npmignore index d375829..5f9e979 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1,4 @@ +_* docs bin test From 5e6e149d21e91766c9f194e6a210ff4f0b08d6e4 Mon Sep 17 00:00:00 2001 From: Borgar Date: Thu, 7 Sep 2023 17:29:44 +0000 Subject: [PATCH 33/35] Update deps and re-lint repo --- .eslintrc | 34 +- bin/textile | 78 - bin/textile.js | 61 + lib/package.json | 1 + package-lock.json | 9454 ++++++++++++++++++++++++---------------- package.json | 33 +- src/Re.js | 2 +- src/VDOM.js | 6 +- src/html.js | 3 +- src/textile/attr.js | 31 +- src/textile/block.js | 6 +- src/textile/endnote.js | 2 +- src/textile/inline.js | 3 +- test/.eslintrc | 8 + test/source-offsets.js | 3 +- 15 files changed, 5942 insertions(+), 3783 deletions(-) delete mode 100755 bin/textile create mode 100755 bin/textile.js create mode 100644 lib/package.json create mode 100644 test/.eslintrc diff --git a/.eslintrc b/.eslintrc index 3ba674c..c27e772 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,21 +1,25 @@ { - extends: [ '@borgar/eslint-config' ], - parserOptions: { - ecmaVersion: 2020, - sourceType: 'module', + "extends": [ + "@borgar/eslint-config", + "@borgar/eslint-config/jsdoc" + ], + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", }, - rules: { - 'import/export': 'error', - 'import/no-unresolved': 'error', - 'no-use-before-define': 'error', - 'no-multiple-empty-lines': [ 'error', { 'max': 2, 'maxBOF': 0, 'maxEOF': 1 }] + "rules": { + "import/export": "error", + "import/no-unresolved": "error", + "no-use-before-define": "error", + "no-mixed-operators": "off", + "no-multiple-empty-lines": [ "error", { "max": 2, "maxBOF": 0, "maxEOF": 1 }] }, - globals: { - require, - module, - exports + "globals": { + "require", + "module", + "exports" }, - plugins: [ - 'import' + "plugins": [ + "import" ] } diff --git a/bin/textile b/bin/textile deleted file mode 100755 index eccd0e3..0000000 --- a/bin/textile +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env node - -var fs = require( 'fs' ); - -var textile; -var nodeVersion = process && process.versions && process.versions.node; -// is this node version mostly ES6 complete -if ( parseInt( nodeVersion || 0, 10 ) > 5 ) { - // serve code from src dir - textile = require( '../src' ); -} -else { - // serve transpiled code - textile = require( '../dist/textile' ); -} - -// clean arguments -var args = []; -process.argv.slice( 2 ).forEach( function ( m, i, s ) { - if ( ( s = /^([^=]+)=(.*)$/.exec( m ) ) ) { - args.push( s[1], s[2] ); - } - else { - args.push( m ); - } -}); - -// parse arguments -var options = {}; -while ( args.length ) { - var arg = args.shift(); - if ( arg === '-t' || arg === '--tokens' ) { - options.tokens = true; - } - else if ( arg === '-i' || arg === '--input' ) { - options.input = args.shift(); - } - else if ( arg === '-o' || arg === '--output' ) { - options.output = args.shift(); - } - else { - if ( !options.files ) { options.files = []; } - options.files.shift( arg ); - } -} - -// input overrides file arguments -if ( options.input ) { - options.files = [ options.input ]; -} - -// writer -var data = ''; -function writeData () { - data = options.tokens ? JSON.stringify( textile.jsonml( data ), null, 2 ) - : textile( data ); - if ( options.output ) { - fs.writeFileSync( options.output, data ); - } - else { - process.stdout.write( data + '\n' ); - } -} - -// file or stdin? -if ( options.files ) { - data = fs.readFileSync( options.files[0], 'utf8' ); - writeData(); -} -else { - const stdin = process.stdin; - stdin.setEncoding( 'utf8' ); - stdin.on( 'data', function ( text ) { - data += text; - }); - stdin.on( 'end', writeData ); - stdin.resume(); -} diff --git a/bin/textile.js b/bin/textile.js new file mode 100755 index 0000000..c53ed7a --- /dev/null +++ b/bin/textile.js @@ -0,0 +1,61 @@ +#!/usr/bin/env node +/* globals process */ +import fs from 'fs'; +import textile from '../src/index.js'; + +// clean arguments +const args = []; +process.argv.slice(2).forEach(function (m, i, s) { + if ((s = /^([^=]+)=(.*)$/.exec(m))) { + args.push(s[1], s[2]); + } + else { + args.push(m); + } +}); + +// parse arguments +const options = {}; +while (args.length) { + const arg = args.shift(); + if (arg === '-i' || arg === '--input') { + options.input = args.shift(); + } + else if (arg === '-o' || arg === '--output') { + options.output = args.shift(); + } + else { + if (!options.files) { options.files = []; } + options.files.push(arg); + } +} + +// input overrides file arguments +if (options.input) { + options.files = [ options.input ]; +} + +// writer +let data = ''; +function writeData () { + const output = textile(data); + if (options.output) { + fs.writeFileSync(options.output, output); + } + else { + process.stdout.write(output + '\n'); + } +} + +// file or stdin? +if (options.files) { + data = fs.readFileSync(options.files[0], 'utf8'); + writeData(); +} +else { + const stdin = process.stdin; + stdin.setEncoding('utf8'); + stdin.on('data', text => (data += text)); + stdin.on('end', writeData); + stdin.resume(); +} diff --git a/lib/package.json b/lib/package.json new file mode 100644 index 0000000..a3c15a7 --- /dev/null +++ b/lib/package.json @@ -0,0 +1 @@ +{ "type": "commonjs" } diff --git a/package-lock.json b/package-lock.json index 409c003..e47d1fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,3292 +1,5062 @@ { "name": "textile-js", "version": "2.1.1", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/compat-data": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", - "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", - "dev": true - }, - "@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", - "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.16.6", - "semver": "^6.3.0" + "packages": { + "": { + "name": "textile-js", + "version": "2.1.1", + "license": "MIT", + "bin": { + "textile-js": "bin/textile.js" + }, + "devDependencies": { + "@babel/core": "~7.22.15", + "@babel/preset-env": "~7.22.15", + "@babel/register": "~7.22.15", + "@borgar/eslint-config": "~3.1.0", + "@borgar/jsdoc-tsmd": "~0.1.0", + "babel-loader": "~9.1.3", + "eslint": "~8.48.0", + "eslint-plugin-import": "~2.28.1", + "eslint-plugin-jsdoc": "~46.5.1", + "nyc": "~15.1.0", + "tap-min": "~3.0.0", + "tape": "~5.6.6", + "terser-webpack-plugin": "~5.3.9", + "webpack": "~5.88.2", + "webpack-cli": "~5.1.4" + }, + "funding": { + "type": "individual", + "url": "https://ko-fi.com/borgar" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz", - "integrity": "sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw==", + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.14.4", - "@babel/helper-split-export-declaration": "^7.12.13" + "engines": { + "node": ">=0.10.0" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", - "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "dev": true, - "requires": { - "@babel/types": "^7.13.0" + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "node_modules/@babel/core": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.15.tgz", + "integrity": "sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA==", "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.15", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.15", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "node_modules/@babel/generator": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", "dev": true, - "requires": { - "@babel/types": "^7.12.13" + "dependencies": { + "@babel/types": "^7.22.15", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, - "requires": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, - "requires": { - "@babel/types": "^7.13.12" + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, - "requires": { - "@babel/types": "^7.13.12" + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, - "requires": { - "@babel/types": "^7.12.13" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "@babel/helper-replace-supers": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", - "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.4" + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, - "requires": { - "@babel/types": "^7.13.12" + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "requires": { - "@babel/types": "^7.12.1" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", + "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", "dev": true, - "requires": { - "@babel/types": "^7.12.13" + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.15.tgz", + "integrity": "sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==", "dev": true, - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", - "dev": true - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", - "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", - "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.3", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", - "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", - "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", - "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", - "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", - "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", - "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz", - "integrity": "sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA==", + "node_modules/@babel/helpers": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", "dev": true, - "requires": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-compilation-targets": "^7.14.4", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.2" + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", - "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", - "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", + "node_modules/@babel/parser": { + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-async-generators": { + "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { + "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz", - "integrity": "sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-classes": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz", - "integrity": "sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.14.4", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", + "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz", - "integrity": "sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", + "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", - "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", + "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" + "dependencies": { + "@babel/helper-module-transforms": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-env": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.4.tgz", - "integrity": "sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-compilation-targets": "^7.14.4", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.14.2", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.14.3", - "@babel/plugin-proposal-dynamic-import": "^7.14.2", - "@babel/plugin-proposal-export-namespace-from": "^7.14.2", - "@babel/plugin-proposal-json-strings": "^7.14.2", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", - "@babel/plugin-proposal-numeric-separator": "^7.14.2", - "@babel/plugin-proposal-object-rest-spread": "^7.14.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.4", - "@babel/plugin-transform-classes": "^7.14.4", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.14.4", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.2", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.14.2", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.4", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", - "semver": "^6.3.0" + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", + "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/register": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", - "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/runtime": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", - "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@borgar/eslint-config": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@borgar/eslint-config/-/eslint-config-2.2.1.tgz", - "integrity": "sha512-wv2RXjDCiD91XYx4Csgs90Hrsf7ncq2abWktO0Lprb8By6t0iYNeizrLd69OO49I0vsYdv1rLXPu+V0Bzl8dlg==", - "dev": true - }, - "@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, "dependencies": { - "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@types/eslint": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.13.tgz", - "integrity": "sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg==", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", - "dev": true + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@types/node": { - "version": "15.12.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz", - "integrity": "sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==", - "dev": true + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "node_modules/@babel/preset-env": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.15.tgz", + "integrity": "sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==", "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.15", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.15", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.15", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.15", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", - "dev": true + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", - "dev": true + "node_modules/@babel/register": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", + "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "node_modules/@babel/runtime": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@xtuc/long": "4.2.2" + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "node_modules/@babel/traverse": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.15.tgz", + "integrity": "sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==", "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "node_modules/@babel/types": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.15.tgz", + "integrity": "sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==", "dev": true, - "requires": { - "@xtuc/long": "4.2.2" + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "node_modules/@borgar/eslint-config": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@borgar/eslint-config/-/eslint-config-3.1.0.tgz", + "integrity": "sha512-t71R6/v2XVjCmK24WUkpdWGpCGfGQLA3nQCAg8rYW2FdGh/bRfuExA27RwkSmjH1Q62XtneGbgdI2FKauuUiXA==", "dev": true }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@xtuc/long": "4.2.2" + "node_modules/@borgar/jsdoc-tsmd": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@borgar/jsdoc-tsmd/-/jsdoc-tsmd-0.1.0.tgz", + "integrity": "sha512-Y2WHiIUFLa3+NBM/ty8ggCxN6VKe7sdPGxAitXsQ9bU4zkphWYiFVg4KdJXYbounWqwIRJUqYYyXJXAxOewFKA==", + "dev": true, + "dependencies": { + "jsdoctypeparser": "~9.0.0", + "typescript": "~5.1.3" + }, + "peerDependencies": { + "jsdoc": "~4.0.2" } }, - "@webpack-cli/configtest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", - "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", - "dev": true - }, - "@webpack-cli/info": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", - "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", + "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", "dev": true, - "requires": { - "envinfo": "^7.7.3" + "engines": { + "node": ">=10.0.0" } }, - "@webpack-cli/serve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", - "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", - "dev": true + "node_modules/@es-joy/jsdoccomment": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz", + "integrity": "sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg==", + "dev": true, + "dependencies": { + "comment-parser": "1.4.0", + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", + "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", + "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdoc/salty": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", + "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v12.0.0" + } + }, + "node_modules/@ljharb/resumer": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@ljharb/resumer/-/resumer-0.0.1.tgz", + "integrity": "sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw==", + "dev": true, + "dependencies": { + "@ljharb/through": "^2.3.9" + }, + "engines": { + "node": ">= 0.4" + } }, - "@xtuc/ieee754": { + "node_modules/@ljharb/through": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.9.tgz", + "integrity": "sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", + "dev": true, + "peer": true + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true, + "peer": true + }, + "node_modules/@types/node": { + "version": "20.5.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.9.tgz", + "integrity": "sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "@xtuc/long": { + "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "aggregate-error": { + "node_modules/aggregate-error": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", "dev": true, - "requires": { + "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" }, - "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - } + "engines": { + "node": ">=8" + } + }, + "node_modules/aggregate-error/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" } }, - "ajv": { + "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { + "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "ajv-keywords": { + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { + "dependencies": { "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "append-transform": { + "node_modules/append-transform": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, - "requires": { + "dependencies": { "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "archy": { + "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, - "argparse": { + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "requires": { + "dependencies": { "sprintf-js": "~1.0.2" } }, - "array-filter": { + "node_modules/array-buffer-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "node_modules/array.prototype.every": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.5.tgz", + "integrity": "sha512-FfMQJ+/joFGXpRCltbzV3znaP5QxIhLFySo0fEPn3GuoYlud9LhknMCIxdYKC2qsM/6VHoSp6YGwe3EZXrEcwQ==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "available-typed-arrays": { + "node_modules/arraybuffer.prototype.slice": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", - "dev": true, - "requires": { - "array-filter": "^1.0.0" - } - }, - "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "node_modules/babel-loader/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "dev": true, - "requires": { - "object.assign": "^4.1.0" + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", - "semver": "^6.1.1" + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz", - "integrity": "sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.9.1" + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2" + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "peer": true }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "buffer-from": { + "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "caching-transform": { + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, - "requires": { + "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", "package-hash": "^4.0.0", "write-file-atomic": "^3.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/caching-transform/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "call-bind": { + "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "callsites": { + "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "camelcase": { + "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "caniuse-lite": { - "version": "1.0.30001234", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001234.tgz", - "integrity": "sha512-a3gjUVKkmwLdNysa1xkUAwN2VfJUJyVW47rsi3aCbkRCtbHAfo+rOsCqVw29G6coQ8gzAPb5XBXwiGHwme3isA==", - "dev": true + "node_modules/caniuse-lite": { + "version": "1.0.30001528", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001528.tgz", + "integrity": "sha512-0Db4yyjR9QMNlsxh+kKWzQtkyflkG/snYheSzkjmvdEtEXB1+jt7A2HmSEiO6XIJPIbo92lHNGNySvE5pZcs5Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } }, - "chalk": { + "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "chrome-trace-event": { + "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0" + } }, - "clean-stack": { + "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "cliui": { + "node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "requires": { + "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, - "clone-deep": { + "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "requires": { + "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "color-convert": { + "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, - "commander": { + "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "commondir": { + "node_modules/comment-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.0.tgz", + "integrity": "sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "~5.1.1" } }, - "core-js-compat": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.13.1.tgz", - "integrity": "sha512-mdrcxc0WznfRd8ZicEZh1qVeJ2mu6bwQFh8YVUK48friy/FOwFV5EJj9/dlh+nMQ74YusdVfBFDuomKgUspxWQ==", + "node_modules/core-js-compat": { + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", + "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", "dev": true, - "requires": { - "browserslist": "^4.16.6", - "semver": "7.0.0" - }, "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "browserslist": "^4.21.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "cross-spawn": { + "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { + "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "requires": { - "ms": "^2.1.1" + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "decamelize": { + "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "deep-equal": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", - "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "node_modules/deep-equal": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "es-get-iterator": "^1.1.1", - "get-intrinsic": "^1.0.1", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.1.1", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", "isarray": "^2.0.5", - "object-is": "^1.1.4", + "object-is": "^1.1.5", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3", - "which-boxed-primitive": "^1.0.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" + "which-typed-array": "^1.1.9" }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "default-require-extensions": { + "node_modules/default-require-extensions": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", "dev": true, - "requires": { - "strip-bom": "^4.0.0" - }, "dependencies": { - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - } + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-require-extensions/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", "dev": true, - "requires": { - "object-keys": "^1.0.12" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "doctrine": { + "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { + "dependencies": { "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "dotignore": { + "node_modules/dotignore": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", "dev": true, - "requires": { + "dependencies": { "minimatch": "^3.0.4" + }, + "bin": { + "ignored": "bin/ignored" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true + "node_modules/duplexer3": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-1.0.0.tgz", + "integrity": "sha512-6O5ndCyJ9CGF9cR2Yi3VFq1OvXXLEgX848InIOl8xUBPYwb8jn/93j10lGaZyLnMRa71IT5OHhURlOiVjH9OVg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "electron-to-chromium": { - "version": "1.3.749", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz", - "integrity": "sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A==", + "node_modules/electron-to-chromium": { + "version": "1.4.510", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.510.tgz", + "integrity": "sha512-xPfLIPFcN/WLXBpQ/K4UgE98oUBO5Tia6BD4rkSR0wE7ep/PwBVlgvPJQrIBpmJGVAmUzwPKuDbVt9XV6+uC2g==", "dev": true }, - "emoji-regex": { + "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" }, - "dependencies": { - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - } + "engines": { + "node": ">=10.13.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true, - "requires": { - "ansi-colors": "^4.1.1" + "peer": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" } }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, - "requires": { + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", "is-map": "^2.0.2", "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", "dev": true }, - "es-to-primitive": { + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "requires": { + "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es6-error": { + "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "escalade": { + "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==", + "node_modules/eslint": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", + "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "ajv": "^6.10.0", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.48.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "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==", - "dev": true - }, - "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true } } }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "46.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.5.1.tgz", + "integrity": "sha512-CPbvKprmEuJYoxMj5g8gXfPqUGgcqMM6jpH06Kp4pn5Uy5MrPkFKzoD7UFp2E4RBzfXbJz1+TeuEivwFVMkXBg==", + "dev": true, + "dependencies": { + "@es-joy/jsdoccomment": "~0.40.1", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.0", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.5.0", + "is-builtin-module": "^3.2.1", + "semver": "^7.5.4", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-module-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", - "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "requires": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - } + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-plugin-import": { - "version": "2.23.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", - "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.1", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.4.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.3", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } + "engines": { + "node": ">=8" } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" + "engines": { + "node": ">=10" }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.1.0" }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" } }, - "esrecurse": { + "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.2.0" }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "engines": { + "node": ">=4.0" } }, - "estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "events": { + "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.x" + } }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/events-to-array": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-2.0.3.tgz", + "integrity": "sha512-f/qE2gImHRa4Cp2y1stEOSgw8wTFyUdVJX7G//bMwbaV9JqISFxg99NbmVQeP7YLnDUZ2un851jlaDrlpmGehQ==", "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "engines": { + "node": ">=12" } }, - "fast-deep-equal": { + "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "fast-json-stable-stringify": { + "node_modules/fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "fast-levenshtein": { + "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "fastest-levenshtein": { + "node_modules/fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, - "file-entry-cache": { + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { + "dependencies": { "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "find-cache-dir": { + "node_modules/find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, - "requires": { + "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "find-up": { + "node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "requires": { + "dependencies": { "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "flat-cache": { + "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "requires": { + "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "flatted": { + "node_modules/flatted": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, - "for-each": { + "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "requires": { + "dependencies": { "is-callable": "^1.1.3" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "foreground-child": { + "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, - "requires": { + "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" } }, - "fromentries": { + "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "get-caller-file": { + "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "get-package-type": { + "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8.0.0" + } }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "glob": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", - "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "requires": { - "is-glob": "^4.0.1" + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "glob-to-regexp": { + "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "globals": { + "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-dynamic-import": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz", + "integrity": "sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-flag": { + "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "has-symbols": { + "node_modules/has-property-descriptors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "hasha": { + "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, - "requires": { + "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "hirestime": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/hirestime/-/hirestime-3.2.2.tgz", - "integrity": "sha512-X+4w5O6JMW7zlgAhad6OPA/MwYTW1FqrF27+6ItRUmDT4jklsXd4N5S5hNCmd9AIGVp8SLsCoGwRe5ddBp/CKg==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "node_modules/hirestime": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/hirestime/-/hirestime-7.0.3.tgz", + "integrity": "sha512-XmjAwwjLJlDjVVljWht/+Pb6vTfs6A0z2ZpaCkVmzEkwiZcO/+lbj1DsxpsDvkVprYHCmNBxTr7tUohdlxG2Hw==", + "dev": true, + "engines": { + "node": ">=6.0" + } }, - "html-escaper": { + "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "import-local": { + "node_modules/import-local": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, - "requires": { + "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.19" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, - "requires": { - "call-bind": "^1.0.0" + "engines": { + "node": ">=10.13.0" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", - "dev": true + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "requires": { - "call-bind": "^1.0.0" + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "requires": { + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-map": { + "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "dev": true + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-plain-object": { + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "requires": { + "dependencies": { "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-tostringtag": "^1.0.0" }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-set": { + "node_modules/is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-stream": { + "node_modules/is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "requires": { - "has-symbols": "^1.0.0" + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-typed-array": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-typedarray": { + "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-weakmap": { + "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-weakset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", - "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", - "dev": true + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-windows": { + "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { + "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "istanbul-lib-coverage": { + "node_modules/istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "istanbul-lib-hook": { + "node_modules/istanbul-lib-hook": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, - "requires": { + "dependencies": { "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "istanbul-lib-instrument": { + "node_modules/istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, - "requires": { + "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "istanbul-lib-processinfo": { + "node_modules/istanbul-lib-processinfo": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", "dev": true, - "requires": { + "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.0", "istanbul-lib-coverage": "^3.0.0-alpha.1", @@ -3295,447 +5065,574 @@ "rimraf": "^3.0.0", "uuid": "^3.3.3" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "istanbul-lib-report": { + "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, - "requires": { + "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "istanbul-lib-source-maps": { + "node_modules/istanbul-lib-source-maps": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, - "requires": { + "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "istanbul-reports": { + "node_modules/istanbul-reports": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, - "requires": { + "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "js-yaml": { + "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "requires": { + "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dev": true, + "peer": true, + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdoctypeparser": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", + "dev": true, + "bin": { + "jsdoctypeparser": "bin/jsdoctypeparser" + }, + "engines": { + "node": ">=10" } }, - "jsesc": { + "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-stable-stringify-without-jsonify": { + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "requires": { - "minimist": "^1.2.5" + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "kind-of": { + "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.9" + } }, - "levn": { + "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, + "peer": true, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "uc.micro": "^1.0.1" } }, - "loader-runner": { + "node_modules/loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } + "dev": true, + "engines": { + "node": ">=6.11.5" } }, - "locate-path": { + "node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, - "requires": { + "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "peer": true }, - "lodash.debounce": { + "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.flattendeep": { + "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, - "lodash.merge": { + "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "requires": { - "yallist": "^4.0.0" - }, "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "yallist": "^3.0.2" } }, - "make-dir": { + "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, - "requires": { + "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "peer": true, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "dev": true, + "peer": true, + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "peer": true + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "peer": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" } }, - "merge-stream": { + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true, + "peer": true + }, + "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "mime-db": { + "node_modules/mime-db": { "version": "1.48.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.31", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dev": true, - "requires": { + "dependencies": { "mime-db": "1.48.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "ms": { + "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-preload": { + "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, - "requires": { + "dependencies": { "process-on-spawn": "^1.0.0" - } - }, - "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true }, - "nyc": { + "node_modules/nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, - "requires": { + "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "caching-transform": "^4.0.0", @@ -3764,874 +5661,912 @@ "test-exclude": "^6.0.0", "yargs": "^15.0.2" }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "object-is": { + "node_modules/nyc/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - } + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "requires": { + "dependencies": { "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "requires": { + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "p-limit": { + "node_modules/p-limit": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, - "requires": { + "dependencies": { "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "p-locate": { + "node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, - "requires": { + "dependencies": { "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "p-map": { + "node_modules/p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "requires": { + "dependencies": { "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "p-try": { + "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "package-hash": { + "node_modules/package-hash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "node_modules/parse-ms": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", + "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true - }, - "path-exists": { + "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, - "pify": { + "node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" + "engines": { + "node": ">= 6" } }, - "pkg-dir": { + "node_modules/pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, - "requires": { + "dependencies": { "find-up": "^3.0.0" - } - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } + "engines": { + "node": ">=6" } }, - "prelude-ls": { + "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "pretty-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-4.0.0.tgz", - "integrity": "sha512-qG66ahoLCwpLXD09ZPHSCbUWYTqdosB7SMP4OffgTgL2PBKXMuUsrk5Bwg8q4qPkjTXsKBMr+YK3Ltd/6F9s/Q==", + "node_modules/pretty-ms": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", + "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", "dev": true, - "requires": { - "parse-ms": "^2.0.0" + "dependencies": { + "parse-ms": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "process-on-spawn": { + "node_modules/process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", "dev": true, - "requires": { + "dependencies": { "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" } }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "punycode": { + "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { - "safe-buffer": "^5.1.0" + "engines": { + "node": ">=6" } }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, - "requires": { - "resolve": "^1.9.0" + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "regenerate": { + "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, - "requires": { - "regenerate": "^1.4.0" + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", "dev": true }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.8.4" } }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "requires": { + "dependencies": { "jsesc": "~0.5.0" }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" } }, - "release-zalgo": { + "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, - "requires": { + "dependencies": { "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" } }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "require-from-string": { + "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "require-main-filename": { + "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-cwd": { + "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, - "requires": { + "dependencies": { "resolve-from": "^5.0.0" }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "requires": { - "through": "~2.3.4" + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, - "requires": { + "dependencies": { "randombytes": "^2.1.0" } }, - "set-blocking": { + "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "shallow-clone": { + "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "requires": { + "dependencies": { "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "signal-exit": { + "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "spawn-wrap": { + "node_modules/spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, - "requires": { + "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", "make-dir": "^3.0.0", @@ -4639,811 +6574,1006 @@ "signal-exit": "^3.0.2", "which": "^2.0.1" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawn-wrap/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "node_modules/spawn-wrap/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "spdx-exceptions": { + "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "spdx-expression-parse": { + "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "requires": { + "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-license-ids": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "string-width": { + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, - "requires": { + "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "string.prototype.trim": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz", - "integrity": "sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q==", + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "ansi-regex": "^5.0.0" + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "supports-color": { + "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tap-min": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tap-min/-/tap-min-3.0.0.tgz", + "integrity": "sha512-oEhFyYCUEmRLYwtlIkRgeVkX538yEQfoSg6BcWXMq05TFsnpsi3vtQZJeEBkXzMWlj1h/rKaRMaWPCvCTmIIXg==", + "dev": true, "dependencies": { - "ajv": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", - "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } + "chalk": "^5.3.0", + "duplexer3": "^1.0.0", + "hirestime": "^7.0.3", + "pretty-ms": "^8.0.0", + "tap-parser": "^13.0.2-1" + }, + "bin": { + "tap-min": "cli.js" + }, + "engines": { + "node": ">=18" } }, - "tap-min": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tap-min/-/tap-min-2.0.0.tgz", - "integrity": "sha512-llKVnIeUOorc9YFmGcfN9kZypBZcz6QA9Pky+cMhXpD/fcU30q1pazSWo6yGBoS2ggeBAkb0BhKZo87xNdUTxQ==", - "dev": true, - "requires": { - "chalk": "^2.1.0", - "duplexer3": "^0.1.4", - "hirestime": "^3.1.1", - "pretty-ms": "^4.0.0", - "readable-stream": "^3.0.6", - "tap-parser": "^9.3.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "node_modules/tap-min/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "tap-parser": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-9.3.3.tgz", - "integrity": "sha512-VlC7tlSZ3EGt2qPLSa9CTJepNkc2yCh7uzhzAF5DxnuujeKbFbKxMA+fxtTWEN2j/KgfGi+mgooiZPKkOhEQyw==", + "node_modules/tap-parser": { + "version": "13.0.2-1", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-13.0.2-1.tgz", + "integrity": "sha512-A6U6TvfwEUFVivyZFiTth3LVrGw9aa4j4cSU8W6ui3sfrZBRNzE1y5YhBomz0+RIRURdspFJdaJvVgSXI68h0Q==", "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "minipass": "^2.2.0", - "tap-yaml": "^1.0.0" + "dependencies": { + "events-to-array": "^2.0.3", + "tap-yaml": "2.1.1-1" + }, + "bin": { + "tap-parser": "bin/cmd.js" + }, + "engines": { + "node": ">= 12" } }, - "tap-yaml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", - "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", + "node_modules/tap-yaml": { + "version": "2.1.1-1", + "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-2.1.1-1.tgz", + "integrity": "sha512-acWZWpwstr0YMms30FW2nlFkJ0hSm/o2x32Hq5v10IKqYKwnRXARSx6TKbz/gzcSoODPi9PkFQYGYBgowxKDfA==", "dev": true, - "requires": { - "yaml": "^1.5.0" + "dependencies": { + "yaml": "^2.3.0", + "yaml-types": "^0.3.0" } }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "tape": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/tape/-/tape-5.2.2.tgz", - "integrity": "sha512-grXrzPC1ly2kyTMKdqxh5GiLpb0BpNctCuecTB0psHX4Gu0nc+uxWR4xKjTh/4CfQlH4zhvTM2/EXmHXp6v/uA==", + "node_modules/tape": { + "version": "5.6.6", + "resolved": "https://registry.npmjs.org/tape/-/tape-5.6.6.tgz", + "integrity": "sha512-rGp2cZ3rfZ6QfTBm6yvohf8aXmDqPyzMKZwTMV12w4i+b/N2Adwlg8PlW8jLqWzlJUZhglyYaLOSrMt/ZlZkAA==", "dev": true, - "requires": { + "dependencies": { + "@ljharb/resumer": "^0.0.1", + "@ljharb/through": "^2.3.9", + "array.prototype.every": "^1.1.4", "call-bind": "^1.0.2", - "deep-equal": "^2.0.5", - "defined": "^1.0.0", + "deep-equal": "^2.2.2", + "defined": "^1.0.1", "dotignore": "^0.1.2", "for-each": "^0.3.3", - "glob": "^7.1.6", + "get-package-type": "^0.1.0", + "glob": "^7.2.3", "has": "^1.0.3", + "has-dynamic-import": "^2.0.1", "inherits": "^2.0.4", - "is-regex": "^1.1.2", - "minimist": "^1.2.5", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.4", + "minimist": "^1.2.8", + "object-inspect": "^1.12.3", "object-is": "^1.1.5", - "object.assign": "^4.1.2", - "resolve": "^2.0.0-next.3", - "resumer": "^0.0.0", - "string.prototype.trim": "^1.2.4", - "through": "^2.3.8" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "resolve": "^2.0.0-next.4", + "string.prototype.trim": "^1.2.7" + }, + "bin": { + "tape": "bin/tape" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "node_modules/tape/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", + "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", + "dev": true, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "terser-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", - "dev": true, - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true } } }, - "test-exclude": { + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "requires": { + "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, - "requires": { + "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", + "json5": "^1.0.2", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" - }, + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "type-check": { + "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "type-fest": { + "node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "typedarray-to-buffer": { + "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "requires": { + "dependencies": { "is-typedarray": "^1.0.0" } }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true, + "peer": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true, + "peer": true }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "engines": { + "node": ">=4" } }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { + "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "bin": { + "uuid": "bin/uuid" } }, - "watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, - "requires": { + "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "webpack": { - "version": "5.38.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.38.1.tgz", - "integrity": "sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==", + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" }, - "dependencies": { - "acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "webpack-cli": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", - "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, - "requires": { + "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.3", - "@webpack-cli/info": "^1.2.4", - "@webpack-cli/serve": "^1.4.0", - "colorette": "^1.2.1", - "commander": "^7.0.0", - "execa": "^5.0.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", "webpack-merge": "^5.7.3" }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true } } }, - "webpack-merge": { + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { "version": "5.7.3", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", "dev": true, - "requires": { + "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "requires": { + "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-collection": { + "node_modules/which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, - "requires": { + "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", "is-weakmap": "^2.0.1", "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-module": { + "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "which-typed-array": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - }, "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "wildcard": { + "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "wrappy": { + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "y18n": { + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true, + "peer": true + }, + "node_modules/y18n": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, - "yallist": { + "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "yaml": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", - "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", + "node_modules/yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", "dev": true, - "requires": { - "@babel/runtime": "^7.6.3" + "engines": { + "node": ">= 14" } }, - "yargs": { + "node_modules/yaml-types": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yaml-types/-/yaml-types-0.3.0.tgz", + "integrity": "sha512-i9RxAO/LZBiE0NJUy9pbN5jFz5EasYDImzRkj8Y81kkInTi1laia3P3K/wlMKzOxFQutZip8TejvQP/DwgbU7A==", + "dev": true, + "engines": { + "node": ">= 16", + "npm": ">= 7" + }, + "peerDependencies": { + "yaml": "^2.3.0" + } + }, + "node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, - "requires": { + "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", @@ -5456,58 +7586,80 @@ "y18n": "^4.0.0", "yargs-parser": "^18.1.2" }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" } }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index a16dfda..e77c1aa 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,13 @@ "lint": "eslint src/ test/", "coverage": "nyc --reporter html --reporter text tape -r @babel/register test/*js" }, + "type": "module", "main": "./lib/textile.js", - "bin": "./bin/textile", + "module": "./src/index.js", + "bin": "./bin/textile.js", + "directories": { + "test": "test" + }, "preferGlobal": false, "repository": "git://github.com/borgar/textile-js.git", "homepage": "https://github.com/borgar/textile-js", @@ -35,18 +40,20 @@ ], "license": "MIT", "devDependencies": { - "@babel/core": "~7.14.3", - "@babel/preset-env": "~7.14.4", - "@babel/register": "~7.13.16", - "@borgar/eslint-config": "~2.2.1", - "babel-loader": "~8.2.2", - "eslint": "~7.28.0", - "eslint-plugin-import": "~2.23.4", + "@babel/core": "~7.22.15", + "@babel/preset-env": "~7.22.15", + "@babel/register": "~7.22.15", + "@borgar/eslint-config": "~3.1.0", + "@borgar/jsdoc-tsmd": "~0.1.0", + "babel-loader": "~9.1.3", + "eslint": "~8.48.0", + "eslint-plugin-import": "~2.28.1", + "eslint-plugin-jsdoc": "~46.5.1", "nyc": "~15.1.0", - "tap-min": "~2.0.0", - "tape": "~5.2.2", - "terser-webpack-plugin": "~5.1.3", - "webpack": "~5.38.1", - "webpack-cli": "~4.7.0" + "tap-min": "~3.0.0", + "tape": "~5.6.6", + "terser-webpack-plugin": "~5.3.9", + "webpack": "~5.88.2", + "webpack-cli": "~5.1.4" } } diff --git a/src/Re.js b/src/Re.js index 302db57..bcc6c1b 100644 --- a/src/Re.js +++ b/src/Re.js @@ -23,7 +23,7 @@ export default class Re { this.pattern = Object.assign({ punct: '[!-/:-@\\[\\\\\\]-`{-~]', space: '\\s' - }, ...patterns); + }, patterns); } collapse (src) { diff --git a/src/VDOM.js b/src/VDOM.js index 44919b9..1c77cc2 100644 --- a/src/VDOM.js +++ b/src/VDOM.js @@ -50,7 +50,7 @@ function appendTo (parent, child) { export class Node { - constructor (tagName) { + constructor () { this.nodeType = NODE; this.pos = {}; } @@ -141,7 +141,7 @@ export class CommentNode extends Node { export class ExtendedNode extends Node { - constructor (tagName, attr) { + constructor () { super(); this.nodeType = EXTENDED_NODE; this.children = []; @@ -232,7 +232,7 @@ export class Element extends Node { export class Document extends Node { - constructor (data) { + constructor () { super(); this.nodeType = DOCUMENT_NODE; this.children = []; diff --git a/src/html.js b/src/html.js index 34018b0..b80a9c3 100644 --- a/src/html.js +++ b/src/html.js @@ -167,7 +167,8 @@ export function parseHtml (tokens, lazy, rawTextOnly = false) { curr.appendChild(node); } else if (token.type === TEXT) { - // if a PRE, CODE, or SCRIPT exists as a parent, use Raw text to prevent glyph convertions + // if a PRE, CODE, or SCRIPT exists as a parent, use Raw text to + // prevent glyph convertions const isRawText = rawTextOnly || stack.some(d => /^(pre|code|script)$/i.test(d.tagName)); const node = isRawText ? new RawNode(token.data) : new TextNode(token.data); node.html = true; diff --git a/src/textile/attr.js b/src/textile/attr.js index 179d29d..ca7ba44 100644 --- a/src/textile/attr.js +++ b/src/textile/attr.js @@ -42,20 +42,23 @@ function testBlock (name) { } /* - The attr bit causes massive problems for span elements when parentheses are used. - Parentheses are a total mess and, unsurprisingly, cause trip-ups: - - RC: `_{display:block}(span) span (span)_` -> `(span) span (span)` - PHP: `_{display:block}(span) span (span)_` -> `(span) span (span)` - - PHP and RC seem to mostly solve this by not parsing a final attr parens on spans if the - following character is a non-space. I've duplicated that: Class/ID is not matched on spans - if it is followed by `endToken` or . - - Lang is not matched here if it is followed by the end token. Theoretically I could limit the lang - attribute to /^\[[a-z]{2+}(\-[a-zA-Z0-9]+)*\]/ because Textile is layered on top of HTML which - only accepts valid BCP 47 language tags, but who knows what atrocities are being preformed - out there in the real world. So this attempts to emulate the other libraries. + The attr bit causes massive problems for span elements when parentheses are + used. Parentheses are a total mess and, unsurprisingly, cause trip-ups: + + RC: `_{display:block}(span) span (span)_` -> + `(span) span (span)` + PHP: `_{display:block}(span) span (span)_` -> + `(span) span (span)` + + PHP and RC seem to mostly solve this by not parsing a final attr parens on + spans if the following character is a non-space. I've duplicated that: + Class/ID is not matched on spans if it is followed by `endToken` or . + + Lang is not matched here if it is followed by the end token. Theoretically I + could limit the lang attribute to /^\[[a-z]{2+}(\-[a-zA-Z0-9]+)*\]/ because + Textile is layered on top of HTML which only accepts valid BCP 47 language + tags, but who knows what atrocities are being preformed out there in the real + world. So this attempts to emulate the other libraries. */ export function parseAttr (input, element, endToken) { input = String(input || ''); diff --git a/src/textile/block.js b/src/textile/block.js index 666c21e..6cdee11 100644 --- a/src/textile/block.js +++ b/src/textile/block.js @@ -137,7 +137,8 @@ export function parseBlock (src, options) { attr.cite = mCite[1]; inner.advance(mCite[0]); } - // RedCloth adds all attr to both which is bad because it produces duplicate IDs + // RedCloth adds all attr to both which is bad because it produces + // duplicate IDs const par = splitParagraphs(inner, { attr: copyAttr(attr, { cite: 1, id: 1 }), options: options @@ -175,14 +176,13 @@ export function parseBlock (src, options) { else if (blockType === 'pre') { // I disagree with RedCloth, but agree with PHP here: // "pre(foo#bar).. line1\n\nline2" prevents multiline preformat blocks - // ...which seems like the whole point of having an extended pre block? + // which seems like the whole point of having an extended pre block? parentNode .appendChild(new Element('pre', attr).setPos(outerOffs, blockLen)) .appendChild(new RawNode(inner.trimEndNewlines())); } else if ((fn = reFootnoteDef.exec(blockType))) { // footnote - // Need to be careful: RedCloth fails "fn1(foo#m). footnote" -- it confuses the ID const fnid = fn[1]; const shouldBacklink = !!fn[2]; attr.class = (attr.class ? attr.class + ' ' : '') + 'footnote'; diff --git a/src/textile/endnote.js b/src/textile/endnote.js index a20f225..8bda40c 100644 --- a/src/textile/endnote.js +++ b/src/textile/endnote.js @@ -163,7 +163,7 @@ export function testNotelist (src) { return t ? [ RegExp.lastMatch ] : null; } -export function parseNotelist (src, options) { +export function parseNotelist (src) { const notelist = new HiddenNode(); notelist.isNotelist = true; notelist.setPos(src.offset, src.length); diff --git a/src/textile/inline.js b/src/textile/inline.js index 6f46eb6..b6b9526 100644 --- a/src/textile/inline.js +++ b/src/textile/inline.js @@ -59,7 +59,7 @@ export function parseInline (src, options) { do { src.save(); - // linebreak -- having this first keeps it from messing to much with other phrases + // linebreak: do this first to keep from messing to much with other phrases const haveCR = src.startsWith('\r\n') ? 1 : 0; if (haveCR) { src.advance(1); // skip cartridge returns @@ -98,6 +98,7 @@ export function parseInline (src, options) { if (step) { src.advance(step); } + // eslint-disable-next-line max-len // FIXME: if we can't match the fence on the end, we should output fence-prefix as normal text // seek end const m2 = getMatchRe(tok, fence, isCode).exec(src); diff --git a/test/.eslintrc b/test/.eslintrc new file mode 100644 index 0000000..2dfd8b5 --- /dev/null +++ b/test/.eslintrc @@ -0,0 +1,8 @@ +{ + "rules": { + "function-paren-newline": "off", + "indent": "off", + "max-len": "off", + "no-multiple-empty-lines": "off", + }, +} diff --git a/test/source-offsets.js b/test/source-offsets.js index 9f9b747..990829f 100644 --- a/test/source-offsets.js +++ b/test/source-offsets.js @@ -134,8 +134,7 @@ test('fn#', t => { [ 'p', [ 0, 14 ], 'fn1.. one\n\ntwo' ], [ 'sup', [ 2, 3 ], '1' ], [ 'br', [ 9, 10 ], '\n' ], - [ 'br', [ 10, 11 ], '\n' ] - ], + [ 'br', [ 10, 11 ], '\n' ] ], 'extended footnote' ); t.deepEqual( From 1293c01e862471cb792f05f86146b64f8c34ef67 Mon Sep 17 00:00:00 2001 From: Borgar Date: Fri, 8 Sep 2023 17:46:42 +0000 Subject: [PATCH 34/35] Adding types and docs as well as a few minor things --- API.md | 1358 ++++++++++++++++++++++++++++++++++++++++++ README.md | 65 ++ README.textile | 48 -- bin/textile.js | 5 +- package-lock.json | 42 +- package.json | 4 + src/VDOM.js | 291 ++++++++- src/index.js | 134 +++-- test/line-numbers.js | 4 +- test/options.js | 32 +- textile.d.ts | 566 ++++++++++++++++++ tsd.json | 12 + webpack.config.js | 6 +- 13 files changed, 2370 insertions(+), 197 deletions(-) create mode 100644 API.md create mode 100644 README.md delete mode 100644 README.textile create mode 100644 textile.d.ts create mode 100644 tsd.json diff --git a/API.md b/API.md new file mode 100644 index 0000000..8e00885 --- /dev/null +++ b/API.md @@ -0,0 +1,1358 @@ +# textile-js API + +**Classes** + +- [CommentNode( data )](#CommentNode) + - [.constructor( data )](#CommentNode.constructor) + - [.data](#CommentNode.data) + - [.nodeType](#CommentNode.nodeType) + - [.pos](#CommentNode.pos) + - [.setPos( start, length )](#CommentNode.setPos) + - [.toHTML()](#CommentNode.toHTML) + - [.visit( fn )](#CommentNode.visit) + - [`static`COMMENT_NODE](#COMMENT_NODE) + - [`static`DOCUMENT_NODE](#DOCUMENT_NODE) + - [`static`ELEMENT_NODE](#ELEMENT_NODE) + - [`static`EXTENDED_NODE](#EXTENDED_NODE) + - [`static`HIDDEN_NODE](#HIDDEN_NODE) + - [`static`NODE](#NODE) + - [`static`RAW_NODE](#RAW_NODE) + - [`static`TEXT_NODE](#TEXT_NODE) +- [Document()](#Document) + - [.appendChild( node )](#Document.appendChild) + - [.children](#Document.children) + - [.firstChild()](#Document.firstChild) + - [.nodeType](#Document.nodeType) + - [.pos](#Document.pos) + - [.setPos( start, length )](#Document.setPos) + - [.toHTML()](#Document.toHTML) + - [.visit( fn )](#Document.visit) + - [`static`COMMENT_NODE](#COMMENT_NODE) + - [`static`DOCUMENT_NODE](#DOCUMENT_NODE) + - [`static`ELEMENT_NODE](#ELEMENT_NODE) + - [`static`EXTENDED_NODE](#EXTENDED_NODE) + - [`static`HIDDEN_NODE](#HIDDEN_NODE) + - [`static`NODE](#NODE) + - [`static`RAW_NODE](#RAW_NODE) + - [`static`TEXT_NODE](#TEXT_NODE) +- [Element( tagName, attr )](#Element) + - [.constructor( tagName, attr )](#Element.constructor) + - [.appendChild( node )](#Element.appendChild) + - [.attr](#Element.attr) + - [.children](#Element.children) + - [.firstChild()](#Element.firstChild) + - [.getAttribute( name )](#Element.getAttribute) + - [.insertBefore( newNode, referenceNode )](#Element.insertBefore) + - [.nodeType](#Element.nodeType) + - [.pos](#Element.pos) + - [.reIndent( shiftBy )](#Element.reIndent) + - [.removeChild( oldNode )](#Element.removeChild) + - [.setAttr( attr )](#Element.setAttr) + - [.setAttribute( name, value )](#Element.setAttribute) + - [.setPos( start, length )](#Element.setPos) + - [.tagName](#Element.tagName) + - [.toHTML()](#Element.toHTML) + - [.visit( fn )](#Element.visit) + - [`static`COMMENT_NODE](#COMMENT_NODE) + - [`static`DOCUMENT_NODE](#DOCUMENT_NODE) + - [`static`ELEMENT_NODE](#ELEMENT_NODE) + - [`static`EXTENDED_NODE](#EXTENDED_NODE) + - [`static`HIDDEN_NODE](#HIDDEN_NODE) + - [`static`NODE](#NODE) + - [`static`RAW_NODE](#RAW_NODE) + - [`static`TEXT_NODE](#TEXT_NODE) +- [ExtendedNode()](#ExtendedNode) + - [.appendChild( node )](#ExtendedNode.appendChild) + - [.children](#ExtendedNode.children) + - [.nodeType](#ExtendedNode.nodeType) + - [.pos](#ExtendedNode.pos) + - [.setPos( start, length )](#ExtendedNode.setPos) + - [.toHTML()](#ExtendedNode.toHTML) + - [.visit( fn )](#ExtendedNode.visit) + - [`static`COMMENT_NODE](#COMMENT_NODE) + - [`static`DOCUMENT_NODE](#DOCUMENT_NODE) + - [`static`ELEMENT_NODE](#ELEMENT_NODE) + - [`static`EXTENDED_NODE](#EXTENDED_NODE) + - [`static`HIDDEN_NODE](#HIDDEN_NODE) + - [`static`NODE](#NODE) + - [`static`RAW_NODE](#RAW_NODE) + - [`static`TEXT_NODE](#TEXT_NODE) +- [HiddenNode( data )](#HiddenNode) + - [.constructor( data )](#HiddenNode.constructor) + - [.data](#HiddenNode.data) + - [.nodeType](#HiddenNode.nodeType) + - [.pos](#HiddenNode.pos) + - [.setPos( start, length )](#HiddenNode.setPos) + - [.toHTML()](#HiddenNode.toHTML) + - [.visit( fn )](#HiddenNode.visit) + - [`static`COMMENT_NODE](#COMMENT_NODE) + - [`static`DOCUMENT_NODE](#DOCUMENT_NODE) + - [`static`ELEMENT_NODE](#ELEMENT_NODE) + - [`static`EXTENDED_NODE](#EXTENDED_NODE) + - [`static`HIDDEN_NODE](#HIDDEN_NODE) + - [`static`NODE](#NODE) + - [`static`RAW_NODE](#RAW_NODE) + - [`static`TEXT_NODE](#TEXT_NODE) +- [Node()](#Node) + - [.nodeType](#Node.nodeType) + - [.pos](#Node.pos) + - [.setPos( start, length )](#Node.setPos) + - [.toHTML()](#Node.toHTML) + - [.visit( fn )](#Node.visit) + - [`static`COMMENT_NODE](#COMMENT_NODE) + - [`static`DOCUMENT_NODE](#DOCUMENT_NODE) + - [`static`ELEMENT_NODE](#ELEMENT_NODE) + - [`static`EXTENDED_NODE](#EXTENDED_NODE) + - [`static`HIDDEN_NODE](#HIDDEN_NODE) + - [`static`NODE](#NODE) + - [`static`RAW_NODE](#RAW_NODE) + - [`static`TEXT_NODE](#TEXT_NODE) +- [RawNode( data )](#RawNode) + - [.constructor( data )](#RawNode.constructor) + - [.data](#RawNode.data) + - [.nodeType](#RawNode.nodeType) + - [.pos](#RawNode.pos) + - [.setPos( start, length )](#RawNode.setPos) + - [.toHTML()](#RawNode.toHTML) + - [.visit( fn )](#RawNode.visit) + - [`static`COMMENT_NODE](#COMMENT_NODE) + - [`static`DOCUMENT_NODE](#DOCUMENT_NODE) + - [`static`ELEMENT_NODE](#ELEMENT_NODE) + - [`static`EXTENDED_NODE](#EXTENDED_NODE) + - [`static`HIDDEN_NODE](#HIDDEN_NODE) + - [`static`NODE](#NODE) + - [`static`RAW_NODE](#RAW_NODE) + - [`static`TEXT_NODE](#TEXT_NODE) +- [TextNode( data )](#TextNode) + - [.constructor( data )](#TextNode.constructor) + - [.data](#TextNode.data) + - [.nodeType](#TextNode.nodeType) + - [.pos](#TextNode.pos) + - [.setPos( start, length )](#TextNode.setPos) + - [.toHTML()](#TextNode.toHTML) + - [.visit( fn )](#TextNode.visit) + - [`static`COMMENT_NODE](#COMMENT_NODE) + - [`static`DOCUMENT_NODE](#DOCUMENT_NODE) + - [`static`ELEMENT_NODE](#ELEMENT_NODE) + - [`static`EXTENDED_NODE](#EXTENDED_NODE) + - [`static`HIDDEN_NODE](#HIDDEN_NODE) + - [`static`NODE](#NODE) + - [`static`RAW_NODE](#RAW_NODE) + - [`static`TEXT_NODE](#TEXT_NODE) + +**Functions** + +- [parseTree( source, options )](#parseTree) +- [textile( source, options )](#textile) + +**Type** + +- [PosData](#PosData) + +## Classes + +### # CommentNode( data ) extends [`Node`](#Node) + +Textile VDOM comment node. + +--- + +#### # .constructor( data ) + +Constructs a new CommentNode + +##### Parameters + +| Name | Type | Description | +| ---- | -------- | ---------------------- | +| data | `string` | The node's string data | + +--- + +#### # .data + +--- + +#### # .nodeType + +TypeID of node + +--- + +#### # .pos + +Position data for the node + +--- + +#### # .setPos( start, length ) ⇒ [`Node`](#Node) + +Sets the source position of the node. + +##### Parameters + +| Name | Type | Description | +| ------ | -------- | ------------------------ | +| start | `number` | The start position | +| length | `number` | The length of the source | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # .toHTML() ⇒ `string` + +Emit the HTML source representation of this node and its children. + +##### Returns + +`string` – HTML source string. + +--- + +#### # .visit( fn ) ⇒ [`Node`](#Node) + +Visit this function and all its descendants. + +The visitor callback will be called for the node and every child in its subtree. It will be supplied a single argument which will be the current node. + +##### Parameters + +| Name | Type | Description | +| ---- | ---------- | ----------------------------- | +| fn | `Function` | The visitor callback function | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # `static`COMMENT_NODE + +Set to 8 + +--- + +#### # `static`DOCUMENT_NODE + +Set to 9 + +--- + +#### # `static`ELEMENT_NODE + +Set to 1 + +--- + +#### # `static`EXTENDED_NODE + +Set to -3 + +--- + +#### # `static`HIDDEN_NODE + +Set to -2 + +--- + +#### # `static`NODE + +Set to 0 + +--- + +#### # `static`RAW_NODE + +Set to -1 + +--- + +#### # `static`TEXT_NODE + +Set to 3 + +--- + +### # Document() extends [`Node`](#Node) + +Textile VDOM document node. + +--- + +#### # .appendChild( node ) ⇒ [`Node`](#Node) + +Appends a node as a direct child of the current element. + +##### Parameters + +| Name | Type | Description | +| ---- | --------------- | --------------- | +| node | [`Node`](#Node) | The node to add | + +##### Returns + +[`Node`](#Node) – The argument node is returned unchanged. + +--- + +#### # .children + +--- + +#### # .firstChild() ⇒ `void` + +The first child of this element. + +--- + +#### # .nodeType + +TypeID of node + +--- + +#### # .pos + +Position data for the node + +--- + +#### # .setPos( start, length ) ⇒ [`Node`](#Node) + +Sets the source position of the node. + +##### Parameters + +| Name | Type | Description | +| ------ | -------- | ------------------------ | +| start | `number` | The start position | +| length | `number` | The length of the source | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # .toHTML() ⇒ `string` + +Emit the HTML source representation of this node and its children. + +##### Returns + +`string` – HTML source string. + +--- + +#### # .visit( fn ) ⇒ [`Node`](#Node) + +Visit this function and all its descendants. + +The visitor callback will be called for the node and every child in its subtree. It will be supplied a single argument which will be the current node. + +##### Parameters + +| Name | Type | Description | +| ---- | ---------- | ----------------------------- | +| fn | `Function` | The visitor callback function | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # `static`COMMENT_NODE + +Set to 8 + +--- + +#### # `static`DOCUMENT_NODE + +Set to 9 + +--- + +#### # `static`ELEMENT_NODE + +Set to 1 + +--- + +#### # `static`EXTENDED_NODE + +Set to -3 + +--- + +#### # `static`HIDDEN_NODE + +Set to -2 + +--- + +#### # `static`NODE + +Set to 0 + +--- + +#### # `static`RAW_NODE + +Set to -1 + +--- + +#### # `static`TEXT_NODE + +Set to 3 + +--- + +### # Element( tagName, attr ) extends [`Node`](#Node) + +Textile VDOM Element node. + +--- + +#### # .constructor( tagName, attr ) + +Constructs a new Element. + +##### Parameters + +| Name | Type | Description | +| ------- | ------------------------ | -------------------------- | +| tagName | `string` | A tag name for the element | +| attr | `Record` | A dictionary of attributes | + +--- + +#### # .appendChild( node ) ⇒ [`Node`](#Node) + +Appends a node as a direct child of the current element. + +##### Parameters + +| Name | Type | Description | +| ---- | --------------- | --------------- | +| node | [`Node`](#Node) | The node to add | + +##### Returns + +[`Node`](#Node) – The argument node is returned unchanged. + +--- + +#### # .attr + +--- + +#### # .children + +--- + +#### # .firstChild() ⇒ `void` + +The first child of this element. + +--- + +#### # .getAttribute( name ) ⇒ `string` | `null` + +Read an attribute of this element. + +##### Parameters + +| Name | Type | Description | +| ---- | -------- | ------------------------- | +| name | `string` | The name of the attribute | + +##### Returns + +`string` | `null` – The attribute value + +--- + +#### # .insertBefore( newNode, referenceNode ) ⇒ [`Node`](#Node) + +Insert a node immediatly before another node + +##### Parameters + +| Name | Type | Description | +| ------------- | --------------- | ------------------------------- | +| newNode | [`Node`](#Node) | The new node to insert | +| referenceNode | [`Node`](#Node) | The node which to insert before | + +##### Returns + +[`Node`](#Node) – The newly inserted node + +--- + +#### # .nodeType + +TypeID of node + +--- + +#### # .pos + +Position data for the node + +--- + +#### # .reIndent( shiftBy ) ⇒ [`Element`](#Element) + +Add or drop tab indentation levels within the element. + +##### Parameters + +| Name | Type | Description | +| ------- | -------- | ---------------------------------------------- | +| shiftBy | `number` | How much to increase/decrease the intentation. | + +##### Returns + +[`Element`](#Element) – The current element. + +--- + +#### # .removeChild( oldNode ) ⇒ [`Node`](#Node) + +Removes a child from the current element. + +##### Parameters + +| Name | Type | Description | +| ------- | --------------- | ------------------------------------------------- | +| oldNode | [`Node`](#Node) | The node that should be detachde from this parent | + +##### Returns + +[`Node`](#Node) – The detached node + +--- + +#### # .setAttr( attr ) ⇒ `void` + +Apply a set attributes onto this element. + +##### Parameters + +| Name | Type | Description | +| ---- | ------------------------ | ----------------------------- | +| attr | `Record` | A dict of attributes to apply | + +--- + +#### # .setAttribute( name, value ) ⇒ `void` + +Set the attribute of this element. + +##### Parameters + +| Name | Type | Description | +| ----- | ------------------ | ------------------------- | +| name | `string` | The name of the attribute | +| value | `string` \| `null` | The attribute value | + +--- + +#### # .setPos( start, length ) ⇒ [`Node`](#Node) + +Sets the source position of the node. + +##### Parameters + +| Name | Type | Description | +| ------ | -------- | ------------------------ | +| start | `number` | The start position | +| length | `number` | The length of the source | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # .tagName + +--- + +#### # .toHTML() ⇒ `string` + +Emit the HTML source representation of this node and its children. + +##### Returns + +`string` – HTML source string. + +--- + +#### # .visit( fn ) ⇒ [`Node`](#Node) + +Visit this function and all its descendants. + +The visitor callback will be called for the node and every child in its subtree. It will be supplied a single argument which will be the current node. + +##### Parameters + +| Name | Type | Description | +| ---- | ---------- | ----------------------------- | +| fn | `Function` | The visitor callback function | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # `static`COMMENT_NODE + +Set to 8 + +--- + +#### # `static`DOCUMENT_NODE + +Set to 9 + +--- + +#### # `static`ELEMENT_NODE + +Set to 1 + +--- + +#### # `static`EXTENDED_NODE + +Set to -3 + +--- + +#### # `static`HIDDEN_NODE + +Set to -2 + +--- + +#### # `static`NODE + +Set to 0 + +--- + +#### # `static`RAW_NODE + +Set to -1 + +--- + +#### # `static`TEXT_NODE + +Set to 3 + +--- + +### # ExtendedNode() extends [`Node`](#Node) + +Textile VDOM extended node container. + +A container for the nodes that are a part of the same extended block. + +--- + +#### # .appendChild( node ) ⇒ [`Node`](#Node) + +Appends a node as a direct child of the current node. + +##### Parameters + +| Name | Type | Description | +| ---- | --------------- | --------------- | +| node | [`Node`](#Node) | The node to add | + +##### Returns + +[`Node`](#Node) – The argument node is returned unchanged. + +--- + +#### # .children + +--- + +#### # .nodeType + +TypeID of node + +--- + +#### # .pos + +Position data for the node + +--- + +#### # .setPos( start, length ) ⇒ [`Node`](#Node) + +Sets the source position of the node. + +##### Parameters + +| Name | Type | Description | +| ------ | -------- | ------------------------ | +| start | `number` | The start position | +| length | `number` | The length of the source | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # .toHTML() ⇒ `string` + +Emit the HTML source representation of this node and its children. + +##### Returns + +`string` – HTML source string. + +--- + +#### # .visit( fn ) ⇒ [`Node`](#Node) + +Visit this function and all its descendants. + +The visitor callback will be called for the node and every child in its subtree. It will be supplied a single argument which will be the current node. + +##### Parameters + +| Name | Type | Description | +| ---- | ---------- | ----------------------------- | +| fn | `Function` | The visitor callback function | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # `static`COMMENT_NODE + +Set to 8 + +--- + +#### # `static`DOCUMENT_NODE + +Set to 9 + +--- + +#### # `static`ELEMENT_NODE + +Set to 1 + +--- + +#### # `static`EXTENDED_NODE + +Set to -3 + +--- + +#### # `static`HIDDEN_NODE + +Set to -2 + +--- + +#### # `static`NODE + +Set to 0 + +--- + +#### # `static`RAW_NODE + +Set to -1 + +--- + +#### # `static`TEXT_NODE + +Set to 3 + +--- + +### # HiddenNode( data ) extends [`Node`](#Node) + +Textile VDOM hidden node. + +This node type is used to capture things that appear in the textile markup, but do not need to be processed or rendered. + +--- + +#### # .constructor( data ) + +Constructs a new HiddenNode + +##### Parameters + +| Name | Type | Description | +| ---- | -------- | ---------------------- | +| data | `string` | The node's string data | + +--- + +#### # .data + +--- + +#### # .nodeType + +TypeID of node + +--- + +#### # .pos + +Position data for the node + +--- + +#### # .setPos( start, length ) ⇒ [`Node`](#Node) + +Sets the source position of the node. + +##### Parameters + +| Name | Type | Description | +| ------ | -------- | ------------------------ | +| start | `number` | The start position | +| length | `number` | The length of the source | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # .toHTML() ⇒ `string` + +Emit the HTML source representation of this node and its children. + +##### Returns + +`string` – HTML source string. + +--- + +#### # .visit( fn ) ⇒ [`Node`](#Node) + +Visit this function and all its descendants. + +The visitor callback will be called for the node and every child in its subtree. It will be supplied a single argument which will be the current node. + +##### Parameters + +| Name | Type | Description | +| ---- | ---------- | ----------------------------- | +| fn | `Function` | The visitor callback function | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # `static`COMMENT_NODE + +Set to 8 + +--- + +#### # `static`DOCUMENT_NODE + +Set to 9 + +--- + +#### # `static`ELEMENT_NODE + +Set to 1 + +--- + +#### # `static`EXTENDED_NODE + +Set to -3 + +--- + +#### # `static`HIDDEN_NODE + +Set to -2 + +--- + +#### # `static`NODE + +Set to 0 + +--- + +#### # `static`RAW_NODE + +Set to -1 + +--- + +#### # `static`TEXT_NODE + +Set to 3 + +--- + +### # Node() + +A basic textile VDOC node. + +--- + +#### # .nodeType + +TypeID of node + +--- + +#### # .pos + +Position data for the node + +--- + +#### # .setPos( start, length ) ⇒ [`Node`](#Node) + +Sets the source position of the node. + +##### Parameters + +| Name | Type | Description | +| ------ | -------- | ------------------------ | +| start | `number` | The start position | +| length | `number` | The length of the source | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # .toHTML() ⇒ `string` + +Emit the HTML source representation of this node and its children. + +##### Returns + +`string` – HTML source string. + +--- + +#### # .visit( fn ) ⇒ [`Node`](#Node) + +Visit this function and all its descendants. + +The visitor callback will be called for the node and every child in its subtree. It will be supplied a single argument which will be the current node. + +##### Parameters + +| Name | Type | Description | +| ---- | ---------- | ----------------------------- | +| fn | `Function` | The visitor callback function | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # `static`COMMENT_NODE + +Set to 8 + +--- + +#### # `static`DOCUMENT_NODE + +Set to 9 + +--- + +#### # `static`ELEMENT_NODE + +Set to 1 + +--- + +#### # `static`EXTENDED_NODE + +Set to -3 + +--- + +#### # `static`HIDDEN_NODE + +Set to -2 + +--- + +#### # `static`NODE + +Set to 0 + +--- + +#### # `static`RAW_NODE + +Set to -1 + +--- + +#### # `static`TEXT_NODE + +Set to 3 + +--- + +### # RawNode( data ) extends [`Node`](#Node) + +Textile VDOM raw-text node. + +Essentially this is the same as a TextNode except it does not merge with textnodes, and is not post-processed by glyph replacers etc. + +--- + +#### # .constructor( data ) + +Constructs a new RawNode + +##### Parameters + +| Name | Type | Description | +| ---- | -------- | ---------------------- | +| data | `string` | The node's string data | + +--- + +#### # .data + +--- + +#### # .nodeType + +TypeID of node + +--- + +#### # .pos + +Position data for the node + +--- + +#### # .setPos( start, length ) ⇒ [`Node`](#Node) + +Sets the source position of the node. + +##### Parameters + +| Name | Type | Description | +| ------ | -------- | ------------------------ | +| start | `number` | The start position | +| length | `number` | The length of the source | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # .toHTML() ⇒ `string` + +Emit the HTML source representation of this node and its children. + +##### Returns + +`string` – HTML source string. + +--- + +#### # .visit( fn ) ⇒ [`Node`](#Node) + +Visit this function and all its descendants. + +The visitor callback will be called for the node and every child in its subtree. It will be supplied a single argument which will be the current node. + +##### Parameters + +| Name | Type | Description | +| ---- | ---------- | ----------------------------- | +| fn | `Function` | The visitor callback function | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # `static`COMMENT_NODE + +Set to 8 + +--- + +#### # `static`DOCUMENT_NODE + +Set to 9 + +--- + +#### # `static`ELEMENT_NODE + +Set to 1 + +--- + +#### # `static`EXTENDED_NODE + +Set to -3 + +--- + +#### # `static`HIDDEN_NODE + +Set to -2 + +--- + +#### # `static`NODE + +Set to 0 + +--- + +#### # `static`RAW_NODE + +Set to -1 + +--- + +#### # `static`TEXT_NODE + +Set to 3 + +--- + +### # TextNode( data ) extends [`Node`](#Node) + +Textile VDOM text node. + +--- + +#### # .constructor( data ) + +Constructs a new TextNode + +##### Parameters + +| Name | Type | Description | +| ---- | -------- | ---------------------- | +| data | `string` | The node's string data | + +--- + +#### # .data + +--- + +#### # .nodeType + +TypeID of node + +--- + +#### # .pos + +Position data for the node + +--- + +#### # .setPos( start, length ) ⇒ [`Node`](#Node) + +Sets the source position of the node. + +##### Parameters + +| Name | Type | Description | +| ------ | -------- | ------------------------ | +| start | `number` | The start position | +| length | `number` | The length of the source | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # .toHTML() ⇒ `string` + +Emit the HTML source representation of this node and its children. + +##### Returns + +`string` – HTML source string. + +--- + +#### # .visit( fn ) ⇒ [`Node`](#Node) + +Visit this function and all its descendants. + +The visitor callback will be called for the node and every child in its subtree. It will be supplied a single argument which will be the current node. + +##### Parameters + +| Name | Type | Description | +| ---- | ---------- | ----------------------------- | +| fn | `Function` | The visitor callback function | + +##### Returns + +[`Node`](#Node) – The context node + +--- + +#### # `static`COMMENT_NODE + +Set to 8 + +--- + +#### # `static`DOCUMENT_NODE + +Set to 9 + +--- + +#### # `static`ELEMENT_NODE + +Set to 1 + +--- + +#### # `static`EXTENDED_NODE + +Set to -3 + +--- + +#### # `static`HIDDEN_NODE + +Set to -2 + +--- + +#### # `static`NODE + +Set to 0 + +--- + +#### # `static`RAW_NODE + +Set to -1 + +--- + +#### # `static`TEXT_NODE + +Set to 3 + +--- + +## Functions + +### # parseTree( source, options ) ⇒ [`Document`](#Document) + +Parse Textile markup and return a "VDOM" tree. + +##### Parameters + +| Name | Type | Default | Description | +| ---------------------------- | --------------------- | ------- | ------------------------------------------------------------------------------------------- | +| source | `string` | | The source transmit | +| options | `object` | | Parsing options | +| options.[allowed_block_tags] | `Array` | | Which HTML tags in the document trigger HTML parsing (def: div, blockquote, ...) | +| options.[auto_backlink] | `boolean` | `true` | Automatically backlink footnotes, regardless of syntax used | +| options.[blocked_uri] | `Array` | | A list of blocked href protocols (def: javascript, vbscript, data) | +| options.[breaks] | `boolean` | `true` | Convert single-line linebreaks to
        | +| options.[glyph_entities] | `boolean` | `true` | Convert entity markup (->) to glyphs (→) | +| options.[id_prefix] | `boolean` \| `string` | `true` | Footnotes and endnote HTML IDs are prefixed with a string (as set here) or number (if true) | + +##### Returns + +[`Document`](#Document) – A textile Document node + +--- + +### # textile( source, options ) ⇒ `string` + +Convert Textile markup to HTML markup. + +##### Parameters + +| Name | Type | Default | Description | +| ---------------------------- | --------------------- | ------- | ------------------------------------------------------------------------------------------- | +| source | `string` | | The source transmit | +| options | `object` | | Parsing options | +| options.[allowed_block_tags] | `Array` | | Which HTML tags in the document trigger HTML parsing (def: div, blockquote, ...) | +| options.[auto_backlink] | `boolean` | `true` | Automatically backlink footnotes, regardless of syntax used | +| options.[blocked_uri] | `Array` | | A list of blocked href protocols (def: javascript, vbscript, data) | +| options.[breaks] | `boolean` | `true` | Convert single-line linebreaks to
        | +| options.[glyph_entities] | `boolean` | `true` | Convert entity markup (->) to glyphs (→) | +| options.[id_prefix] | `boolean` \| `string` | `true` | Footnotes and endnote HTML IDs are prefixed with a string (as set here) or number (if true) | + +##### Returns + +`string` – HTML source string + +--- + +## Type + +### # PosData = `object` + +Offsets in the Textile source for this node + +##### Properties + +| Name | Type | Description | +| ------- | -------- | --------------------- | +| [end] | `number` | Where the node ends | +| [start] | `number` | Where the node starts | + +--- + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..2314fcf --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +# textile.js + +_Textile.js_ is a fully featured implementation of Textile parser/converter in JavaScript that runs reasonably fast and avoids outputting broken HTML. + +Give it a go in [a live textile web editor](http://borgar.github.com/textile-js/). + + +## Install + +The library is available + +```sh +npm install textile-js +``` + + +## Usage + +```js +import { textile } from 'textile-js'; + +console.log(textile("I am using __textile__.")); +``` + +You may supply a number of options to the converter: + +```js +textile("I am using __textile__.", { breaks: false }) +``` + +* `breaks` - Used to disable the default behavior of line-breaking single newlines within blocks. +* `auto_backlink` - Turn this on to have footnotes automatically link back to their references (otherwise enabled by syntax: `fn1^`). +* `glyph_entities` - Allows disabling of processing glyph syntax ([->]) to glyphs (→) +* [...and more](./API.md#textile) + +You can also get to the parsed document tree: + +```js +const vdom = textile.parse(text); +console.log(vdom); +``` + +See [API documentation](./API.md) for more detailed descriptions. + + +## CLI interface included + +``` +$ textile -o hello.html +hello world +^D +$ cat hello.html +

        hello world

        +``` + +Usage: `textile [-o outputfile] [inputfile]` + +If no input file is provided, the program will listen to data on `stdin`. + + +## License + +Copyright © 2012, Borgar Þorsteinsson (MIT License). + +See [LICENSE](./LICENSE) diff --git a/README.textile b/README.textile deleted file mode 100644 index bef3895..0000000 --- a/README.textile +++ /dev/null @@ -1,48 +0,0 @@ -h1. textile.js - -Attempt at an implementation of fully featured Textile parser in JavaScript that runs reasonably fast and mostly avoids outputting broken HTML. - -Give it a go in "a live textile web editor":http://borgar.github.com/textile-js/. - - -h2. Install - -bc. $ npm install textile-js - - -h2. Options - -The basic interface mimics "marked":https://github.com/chjj/marked, the popular markdown parser. So if you use that in your project then you can support Textile as well with minimal effort. - -The supported options are: - -* @breaks@ [default: [@true@]] -Used to enable/disable the default behavior of line-breaking single newlines within blocks. -* @autobacklink@ [default: [@false@]] -Turn this on to have footnotes automatically backlink to their references (otherwise enabled by syntax: @fn1^@). - - -h2. Usage - -bc. console.log( textile( "I am using __textile__." ) ); - -You can also get to the syntax tree, which uses "JsonML":http://www.jsonml.org/. - -bc. var jsonml = textile.parse( text ); -console.log( jsonml ); - - -h2. CLI - -bc. $ textile -o hello.html -hello world -^D -$ cat hello.html -

        hello world

        - - -h2. License - -Copyright (c) 2012, Borgar Þorsteinsson (MIT License). - -See LICENSE. diff --git a/bin/textile.js b/bin/textile.js index c53ed7a..3acef8a 100755 --- a/bin/textile.js +++ b/bin/textile.js @@ -18,10 +18,7 @@ process.argv.slice(2).forEach(function (m, i, s) { const options = {}; while (args.length) { const arg = args.shift(); - if (arg === '-i' || arg === '--input') { - options.input = args.shift(); - } - else if (arg === '-o' || arg === '--output') { + if (arg === '-o' || arg === '--output') { options.output = args.shift(); } else { diff --git a/package-lock.json b/package-lock.json index e47d1fc..5ea548a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "eslint": "~8.48.0", "eslint-plugin-import": "~2.28.1", "eslint-plugin-jsdoc": "~46.5.1", + "jsdoc": "~4.0.2", "nyc": "~15.1.0", "tap-min": "~3.0.0", "tape": "~5.6.6", @@ -2031,7 +2032,6 @@ "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", "dev": true, - "peer": true, "dependencies": { "lodash": "^4.17.21" }, @@ -2137,15 +2137,13 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@types/markdown-it": { "version": "12.2.3", "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", "dev": true, - "peer": true, "dependencies": { "@types/linkify-it": "*", "@types/mdurl": "*" @@ -2155,8 +2153,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@types/node": { "version": "20.5.9", @@ -2844,8 +2841,7 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -2993,7 +2989,6 @@ "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", "dev": true, - "peer": true, "dependencies": { "lodash": "^4.17.15" }, @@ -3321,7 +3316,6 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true, - "peer": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -5247,7 +5241,6 @@ "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", "dev": true, - "peer": true, "dependencies": { "xmlcreate": "^2.0.4" } @@ -5257,7 +5250,6 @@ "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", "dev": true, - "peer": true, "dependencies": { "@babel/parser": "^7.20.15", "@jsdoc/salty": "^0.2.1", @@ -5296,7 +5288,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -5369,7 +5360,6 @@ "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", "dev": true, - "peer": true, "dependencies": { "graceful-fs": "^4.1.9" } @@ -5392,7 +5382,6 @@ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, - "peer": true, "dependencies": { "uc.micro": "^1.0.1" } @@ -5423,8 +5412,7 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -5480,7 +5468,6 @@ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, - "peer": true, "dependencies": { "argparse": "^2.0.1", "entities": "~2.1.0", @@ -5497,7 +5484,6 @@ "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", "dev": true, - "peer": true, "peerDependencies": { "@types/markdown-it": "*", "markdown-it": "*" @@ -5507,15 +5493,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "peer": true + "dev": true }, "node_modules/marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, - "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -5527,8 +5511,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true, - "peer": true + "dev": true }, "node_modules/merge-stream": { "version": "2.0.0", @@ -5583,7 +5566,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "peer": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -6274,7 +6256,6 @@ "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", "dev": true, - "peer": true, "dependencies": { "lodash": "^4.17.21" } @@ -7117,8 +7098,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/unbox-primitive": { "version": "1.0.2", @@ -7139,8 +7119,7 @@ "version": "1.13.6", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true, - "peer": true + "dev": true }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -7531,8 +7510,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/y18n": { "version": "4.0.1", diff --git a/package.json b/package.json index e77c1aa..edc5cdf 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "version": "2.1.1", "scripts": { "build": "webpack --mode production", + "build:types": "jsdoc -c tsd.json src>textile.d.ts", + "build:docs": "echo '# textile-js API\n'>API.md; jsdoc -t node_modules/@borgar/jsdoc-tsmd -d console src/>>API.md", "start": "webpack --mode development --watch", "dev": "nodemon -w test -w src -x 'tape -r @babel/register 'test/*.js'|tap-min'", "test": "tape -r @babel/register 'test/*js' | tap-min", @@ -15,6 +17,7 @@ "main": "./lib/textile.js", "module": "./src/index.js", "bin": "./bin/textile.js", + "types": "textiles.d.ts", "directories": { "test": "test" }, @@ -49,6 +52,7 @@ "eslint": "~8.48.0", "eslint-plugin-import": "~2.28.1", "eslint-plugin-jsdoc": "~46.5.1", + "jsdoc": "~4.0.2", "nyc": "~15.1.0", "tap-min": "~3.0.0", "tape": "~5.6.6", diff --git a/src/VDOM.js b/src/VDOM.js index 1c77cc2..f5cc71f 100644 --- a/src/VDOM.js +++ b/src/VDOM.js @@ -30,7 +30,6 @@ function renderAttr (attr) { } function appendTo (parent, child) { - // FIXME: implement NodeList? if (Array.isArray(child)) { child.forEach(n => parent.appendChild(n)); } @@ -48,28 +47,58 @@ function appendTo (parent, child) { return child; } - +/** + * Offsets in the Textile source for this node + * @typedef {object} PosData + * @property {number} [start] Where the node starts + * @property {number} [end] Where the node ends + */ + +/** + * A basic textile VDOC node. + * + * @property {number} NODE Set to 0 + * @property {number} ELEMENT_NODE Set to 1 + * @property {number} HIDDEN_NODE Set to -2 + * @property {number} RAW_NODE Set to -1 + * @property {number} EXTENDED_NODE Set to -3 + * @property {number} TEXT_NODE Set to 3 + * @property {number} DOCUMENT_NODE Set to 9 + * @property {number} COMMENT_NODE Set to 8 + */ export class Node { constructor () { + /** + * TypeID of node + * @type {number} + */ this.nodeType = NODE; + /** + * Position data for the node + * @type {PosData} + */ this.pos = {}; } + /** + * Emit the HTML source representation of this node and its children. + * + * @returns {string} HTML source string. + */ toHTML () { - const { tagName, children } = this; - if (!tagName) { - return ''; - } - // be careful about adding whitespace here for inline elements - if (tagName in singletons || (tagName.includes(':') && !children.length)) { - return `<${tagName}${renderAttr(this.attr)} />`; - } - else { - const innerHTML = this.children.map(d => d.toHTML()); - return `<${tagName}${renderAttr(this.attr)}>${innerHTML.join('')}`; - } + return ''; } + /** + * Visit this function and all its descendants. + * + * The visitor callback will be called for the node and every child in its + * subtree. It will be supplied a single argument which will be the current + * node. + * + * @param {Function} fn The visitor callback function + * @returns {Node} The context node + */ visit (fn) { fn(this); if (this.children) { @@ -78,6 +107,13 @@ export class Node { return this; } + /** + * Sets the source position of the node. + * + * @param {number} start The start position + * @param {number} length The length of the source + * @returns {Node} The context node + */ setPos (start, length) { this.pos.start = start; this.pos.end = start + length; @@ -85,11 +121,29 @@ export class Node { } } - +/** + * Textile VDOM text node. + * + * @property {number} NODE Set to 0 + * @property {number} ELEMENT_NODE Set to 1 + * @property {number} HIDDEN_NODE Set to -2 + * @property {number} RAW_NODE Set to -1 + * @property {number} EXTENDED_NODE Set to -3 + * @property {number} TEXT_NODE Set to 3 + * @property {number} DOCUMENT_NODE Set to 9 + * @property {number} COMMENT_NODE Set to 8 + * @augments Node + */ export class TextNode extends Node { + /** + * Constructs a new TextNode + * + * @param {string} data The node's string data + */ constructor (data) { super(); this.nodeType = TEXT_NODE; + /** @type {string} */ this.data = String(data); } @@ -98,13 +152,32 @@ export class TextNode extends Node { } } - -// Essentially this is the same as a textnode except it should not -// merge with textnodes, and should not be post-processed. +/** + * Textile VDOM raw-text node. + * + * Essentially this is the same as a TextNode except it does not merge with + * textnodes, and is not post-processed by glyph replacers etc. + * + * @property {number} NODE Set to 0 + * @property {number} ELEMENT_NODE Set to 1 + * @property {number} HIDDEN_NODE Set to -2 + * @property {number} RAW_NODE Set to -1 + * @property {number} EXTENDED_NODE Set to -3 + * @property {number} TEXT_NODE Set to 3 + * @property {number} DOCUMENT_NODE Set to 9 + * @property {number} COMMENT_NODE Set to 8 + * @augments Node + */ export class RawNode extends Node { + /** + * Constructs a new RawNode + * + * @param {string} data The node's string data + */ constructor (data) { super(); this.nodeType = RAW_NODE; + /** @type {string} */ this.data = String(data); } @@ -113,11 +186,32 @@ export class RawNode extends Node { } } - +/** + * Textile VDOM hidden node. + * + * This node type is used to capture things that appear in the + * textile markup, but do not need to be processed or rendered. + * + * @property {number} NODE Set to 0 + * @property {number} ELEMENT_NODE Set to 1 + * @property {number} HIDDEN_NODE Set to -2 + * @property {number} RAW_NODE Set to -1 + * @property {number} EXTENDED_NODE Set to -3 + * @property {number} TEXT_NODE Set to 3 + * @property {number} DOCUMENT_NODE Set to 9 + * @property {number} COMMENT_NODE Set to 8 + * @augments Node + */ export class HiddenNode extends Node { + /** + * Constructs a new HiddenNode + * + * @param {string} data The node's string data + */ constructor (data) { super(); this.nodeType = HIDDEN_NODE; + /** @type {string} */ this.data = String(data); } @@ -126,11 +220,29 @@ export class HiddenNode extends Node { } } - +/** + * Textile VDOM comment node. + * + * @property {number} NODE Set to 0 + * @property {number} ELEMENT_NODE Set to 1 + * @property {number} HIDDEN_NODE Set to -2 + * @property {number} RAW_NODE Set to -1 + * @property {number} EXTENDED_NODE Set to -3 + * @property {number} TEXT_NODE Set to 3 + * @property {number} DOCUMENT_NODE Set to 9 + * @property {number} COMMENT_NODE Set to 8 + * @augments Node + */ export class CommentNode extends Node { + /** + * Constructs a new CommentNode + * + * @param {string} data The node's string data + */ constructor (data) { super(); this.nodeType = COMMENT_NODE; + /** @type {string} */ this.data = String(data); } @@ -140,13 +252,38 @@ export class CommentNode extends Node { } +/** + * Textile VDOM extended node container. + * + * A container for the nodes that are a part of the same extended block. + * + * @property {number} NODE Set to 0 + * @property {number} ELEMENT_NODE Set to 1 + * @property {number} HIDDEN_NODE Set to -2 + * @property {number} RAW_NODE Set to -1 + * @property {number} EXTENDED_NODE Set to -3 + * @property {number} TEXT_NODE Set to 3 + * @property {number} DOCUMENT_NODE Set to 9 + * @property {number} COMMENT_NODE Set to 8 + * @augments Node + */ export class ExtendedNode extends Node { + /** + * Constructs a new ExtendedNode + */ constructor () { super(); this.nodeType = EXTENDED_NODE; + /** @type {Array} */ this.children = []; } + /** + * Appends a node as a direct child of the current node. + * + * @param {Node} node The node to add + * @returns {Node} The argument node is returned unchanged. + */ appendChild (node) { return appendTo(this, node); } @@ -156,19 +293,45 @@ export class ExtendedNode extends Node { } } - +/** + * Textile VDOM Element node. + * + * @property {number} NODE Set to 0 + * @property {number} ELEMENT_NODE Set to 1 + * @property {number} HIDDEN_NODE Set to -2 + * @property {number} RAW_NODE Set to -1 + * @property {number} EXTENDED_NODE Set to -3 + * @property {number} TEXT_NODE Set to 3 + * @property {number} DOCUMENT_NODE Set to 9 + * @property {number} COMMENT_NODE Set to 8 + * @augments Node + */ export class Element extends Node { + /** + * Constructs a new Element. + * + * @param {string} tagName A tag name for the element + * @param {Object} attr A dictionary of attributes + */ constructor (tagName, attr) { super(); + /** @type {string} */ this.tagName = tagName; this.nodeType = ELEMENT_NODE; + /** @type {Object} */ this.attr = Object.assign({}, attr); + /** @type {Array} */ this.children = []; } - // FIXME: move to a utility function that can be passed to node.visit() - // drop or add tab levels + /** + * Add or drop tab indentation levels within the element. + * + * @param {number} shiftBy How much to increase/decrease the intentation. + * @returns {Element} The current element. + */ reIndent (shiftBy) { + // FIXME: move to a utility function that can be passed to node.visit() if (shiftBy) { const children = this.children; children.forEach(child => { @@ -192,10 +355,23 @@ export class Element extends Node { return this; } + /** + * Appends a node as a direct child of the current element. + * + * @param {Node} node The node to add + * @returns {Node} The argument node is returned unchanged. + */ appendChild (node) { return appendTo(this, node); } + /** + * Insert a node immediatly before another node + * + * @param {Node} newNode The new node to insert + * @param {Node} referenceNode The node which to insert before + * @returns {Node} The newly inserted node + */ insertBefore (newNode, referenceNode) { const index = !!referenceNode && this.children.indexOf(referenceNode); const finalIndex = index < 0 || typeof index !== 'number' ? Infinity : index; @@ -203,6 +379,12 @@ export class Element extends Node { return newNode; } + /** + * Removes a child from the current element. + * + * @param {Node} oldNode The node that should be detachde from this parent + * @returns {Node} The detached node + */ removeChild (oldNode) { const index = !!oldNode && this.children.indexOf(oldNode); if (index >= 0) { @@ -211,30 +393,80 @@ export class Element extends Node { return oldNode; } + /** + * The first child of this element. + * + * @type {Node | undefined} + */ get firstChild () { return this.children[0]; } + /** + * Apply a set attributes onto this element. + * + * @param {Object} attr A dict of attributes to apply + */ setAttr (attr) { for (const key in attr) { this.setAttribute(key, attr[key]); } } + toHTML () { + const { tagName, children } = this; + if (tagName && children) { + // be careful about adding whitespace here for inline elements + if (tagName in singletons || (tagName.includes(':') && !children.length)) { + return `<${tagName}${renderAttr(this.attr)} />`; + } + else { + const innerHTML = this.children.map(d => d.toHTML()); + return `<${tagName}${renderAttr(this.attr)}>${innerHTML.join('')}`; + } + } + return ''; + } + + /** + * Read an attribute of this element. + * + * @param {string} name The name of the attribute + * @returns {string|null} The attribute value + */ getAttribute (name) { return name in this.attr ? this.attr[name] : null; } + /** + * Set the attribute of this element. + * + * @param {string} name The name of the attribute + * @param {string|null} value The attribute value + */ setAttribute (name, value) { this.attr[name] = value; } } - +/** + * Textile VDOM document node. + * + * @property {number} NODE Set to 0 + * @property {number} ELEMENT_NODE Set to 1 + * @property {number} HIDDEN_NODE Set to -2 + * @property {number} RAW_NODE Set to -1 + * @property {number} EXTENDED_NODE Set to -3 + * @property {number} TEXT_NODE Set to 3 + * @property {number} DOCUMENT_NODE Set to 9 + * @property {number} COMMENT_NODE Set to 8 + * @augments Node + */ export class Document extends Node { constructor () { super(); this.nodeType = DOCUMENT_NODE; + /** @type {Array} */ this.children = []; } @@ -242,10 +474,21 @@ export class Document extends Node { return this.children.map(d => d.toHTML()).join(''); } + /** + * The first child of this element. + * + * @type {Node | undefined} + */ get firstChild () { return this.children[0]; } + /** + * Appends a node as a direct child of the current element. + * + * @param {Node} node The node to add + * @returns {Node} The argument node is returned unchanged. + */ appendChild (node) { return appendTo(this, node); } diff --git a/src/index.js b/src/index.js index ab305d3..5765f05 100644 --- a/src/index.js +++ b/src/index.js @@ -8,6 +8,40 @@ import { parseBlock } from './textile/block.js'; import { CommentNode, Document, Element, ExtendedNode, HiddenNode, Node, RawNode, TextNode } from './VDOM.js'; +// default options +export const defaultOptions = Object.freeze({ + // single-line linebreaks are converted to
        by default + breaks: true, + // automatically backlink footnotes, regardless of syntax + auto_backlink: false, + // list of blocked href protocols + blocked_uri: [ + 'javascript', + 'vbscript', + 'data' + ], + // HTML tags allowed in the document (root) level that trigger HTML parsing + allowed_block_tags: [ + 'blockquote', + 'div', + 'hr', + 'li', + 'noscript', + 'notextile', + 'object', + 'ol', + 'p', + 'pre', + 'script', + 'style', + 'ul' + ], + // id prefix + id_prefix: false, + // glyph entities + glyph_entities: false +}); + function parseTextile (tx, options) { const root = new Document(); root.pos.start = 0; @@ -54,7 +88,7 @@ function addLines (rootNode, sourceTx) { } function getOptions (options) { - const opts = Object.assign({}, textile.defaults, options); + const opts = Object.assign({}, defaultOptions, options); if (opts.id_prefix && typeof opts.id_prefix !== 'string') { opts.id_prefix = Math.floor(Math.random() * 1e9).toString(36); } @@ -64,69 +98,55 @@ function getOptions (options) { return opts; } -export default function textile (sourceTx, options) { +/** + * Convert Textile markup to HTML markup. + * + * @param {string} source The source transmit + * @param {object} options Parsing options + * @param {boolean} [options.breaks=true] Convert single-line linebreaks to
        + * @param {boolean} [options.auto_backlink=true] Automatically backlink footnotes, regardless of syntax used + * @param {boolean|string} [options.id_prefix=true] Footnotes and endnote HTML IDs are prefixed with a string (as set here) or number (if true) + * @param {boolean} [options.glyph_entities=true] Convert entity markup (->) to glyphs (→) + * @param {Array} [options.blocked_uri] A list of blocked href protocols (def: javascript, vbscript, data) + * @param {Array} [options.allowed_block_tags] Which HTML tags in the document trigger HTML parsing (def: div, blockquote, ...) + * @returns {string} HTML source string + */ +export function textile (source, options) { // get a throw-away copy of options const opt = getOptions(options); // run the converter - return parseTextile(sourceTx, opt).toHTML(); + return parseTextile(source, opt).toHTML(); } -textile.CommentNode = CommentNode; -textile.Document = Document; -textile.Element = Element; -textile.ExtendedNode = ExtendedNode; -textile.RawNode = RawNode; -textile.TextNode = TextNode; -export { CommentNode, Document, Element, ExtendedNode, HiddenNode, Node, RawNode, TextNode }; - -// options -textile.defaults = { - // single-line linebreaks are converted to
        by default - breaks: true, - // automatically backlink footnotes, regardless of syntax - auto_backlink: false, - // list of blocked href protocols - blocked_uri: [ - 'javascript', - 'vbscript', - 'data' - ], - // HTML tags allowed in the document (root) level that trigger HTML parsing - allowed_block_tags: [ - 'blockquote', - 'div', - 'hr', - 'li', - 'noscript', - 'notextile', - 'object', - 'ol', - 'p', - 'pre', - 'script', - 'style', - 'ul' - ], - // id prefix - id_prefix: false, - // glyph entities - glyph_entities: false -}; - -textile.setOptions = opt => { - Object.assign(textile.defaults, opt); - return this; -}; - +// support legacy UI textile.convert = textile; +export default textile; -textile.parse = textile; +// textile.Node = Node; +// textile.CommentNode = CommentNode; +// textile.Document = Document; +// textile.Element = Element; +// textile.ExtendedNode = ExtendedNode; +// textile.RawNode = RawNode; +// textile.TextNode = TextNode; +export { CommentNode, Document, Element, ExtendedNode, HiddenNode, Node, RawNode, TextNode }; -textile.parseTree = function (sourceTx, options) { +/** + * Parse Textile markup and return a "VDOM" tree. + * + * @param {string} source The source transmit + * @param {object} options Parsing options + * @param {boolean} [options.breaks=true] Convert single-line linebreaks to
        + * @param {boolean} [options.auto_backlink=true] Automatically backlink footnotes, regardless of syntax used + * @param {boolean|string} [options.id_prefix=true] Footnotes and endnote HTML IDs are prefixed with a string (as set here) or number (if true) + * @param {boolean} [options.glyph_entities=true] Convert entity markup (->) to glyphs (→) + * @param {Array} [options.blocked_uri] A list of blocked href protocols (def: javascript, vbscript, data) + * @param {Array} [options.allowed_block_tags] Which HTML tags in the document trigger HTML parsing (def: div, blockquote, ...) + * @returns {Document} A textile Document node + */ +export function parse (source, options) { return addLines( - parseTextile(sourceTx, getOptions(options)), - sourceTx + parseTextile(source, getOptions(options)), + source ); -}; - -export const parseTree = textile.parseTree; +} diff --git a/test/line-numbers.js b/test/line-numbers.js index 8cf51c3..e702fda 100644 --- a/test/line-numbers.js +++ b/test/line-numbers.js @@ -1,8 +1,8 @@ import test from 'tape'; -import textile from '../src/index.js'; +import { parseTree } from '../src/index.js'; function parse (tx) { - return textile.parseTree(tx) + return parseTree(tx) .visit(node => { if (node.nodeType === 1) { node.setAttribute('data-line', node.pos.line + 1); diff --git a/test/options.js b/test/options.js index 1ee290f..6b15915 100644 --- a/test/options.js +++ b/test/options.js @@ -1,12 +1,12 @@ import test from 'tape'; -import textile from '../src/index.js'; +import { textile } from '../src/index.js'; test('jstextile options', t => { const paragraph = 'Some paragraph\nwith a linebreak.'; // By default, inline linebreaks will be converted to html linebreaks - t.is(textile.convert(paragraph), + t.is(textile(paragraph), '

        Some paragraph
        \nwith a linebreak.

        '); - t.is(textile.convert(paragraph, { breaks: false }), + t.is(textile(paragraph, { breaks: false }), '

        Some paragraph\nwith a linebreak.

        '); t.end(); }); @@ -14,7 +14,7 @@ test('jstextile options', t => { test('jstextile options', t => { // linebreak option works in tables - t.is(textile.convert('|a|b\nc|d|\n|a|b|c|\n'), + t.is(textile('|a|b\nc|d|\n|a|b|c|\n'), '\n' + '\t\n' + '\t\t\n' + @@ -27,7 +27,7 @@ test('jstextile options', t => { '\t\t\n' + '\t\n' + '
        ac
        '); - t.is(textile.convert('|a|b\nc|d|\n|a|b|c|\n', { breaks: false }), + t.is(textile('|a|b\nc|d|\n|a|b|c|\n', { breaks: false }), '\n' + '\t\n' + '\t\t\n' + @@ -43,25 +43,3 @@ test('jstextile options', t => { t.end(); }); - -test('jstextile options', t => { - const paragraph = 'Some paragraph\nwith a linebreak.'; - const savedOptions = {}; - for (const k in textile.defaults) { - savedOptions[k] = textile.defaults[k]; - } - // setting a global option makes it the subsequent default - textile.setOptions({ breaks: false }); - t.is(textile.convert(paragraph), - '

        Some paragraph\nwith a linebreak.

        '); - // the default has changed, but passing options overrides new defult - t.is(textile.convert(paragraph, { breaks: true }), - '

        Some paragraph
        \nwith a linebreak.

        '); - // ... and doesn't affect the new default - t.is(textile.convert(paragraph), - '

        Some paragraph\nwith a linebreak.

        '); - // reset options -- - textile.setOptions(savedOptions); - t.end(); -}); - diff --git a/textile.d.ts b/textile.d.ts new file mode 100644 index 0000000..a110494 --- /dev/null +++ b/textile.d.ts @@ -0,0 +1,566 @@ +/** Textile VDOM comment node. */ +export declare class CommentNode extends Node { + /** + * Constructs a new CommentNode + * + * @param data The node's string data + */ + constructor(data: string); + data: string; + /** TypeID of node */ + nodeType: number; + /** Position data for the node */ + pos: PosData; + /** + * Sets the source position of the node. + * + * @param start The start position + * @param length The length of the source + * @returns The context node + */ + setPos(start: number, length: number): Node; + /** + * Emit the HTML source representation of this node and its children. + * + * @returns HTML source string. + */ + toHTML(): string; + /** + * Visit this function and all its descendants. + * The visitor callback will be called for the node and every child in its + * subtree. It will be supplied a single argument which will be the current + * node. + * + * @param fn The visitor callback function + * @returns The context node + */ + visit(fn: Function): Node; + /** Set to 8 */ + static COMMENT_NODE: number; + /** Set to 9 */ + static DOCUMENT_NODE: number; + /** Set to 1 */ + static ELEMENT_NODE: number; + /** Set to -3 */ + static EXTENDED_NODE: number; + /** Set to -2 */ + static HIDDEN_NODE: number; + /** Set to 0 */ + static NODE: number; + /** Set to -1 */ + static RAW_NODE: number; + /** Set to 3 */ + static TEXT_NODE: number; +} + +/** Textile VDOM document node. */ +export declare class Document extends Node { + /** + * Appends a node as a direct child of the current element. + * + * @param node The node to add + * @returns The argument node is returned unchanged. + */ + appendChild(node: Node): Node; + children: Array; + /** The first child of this element. */ + firstChild: (Node | undefined); + /** TypeID of node */ + nodeType: number; + /** Position data for the node */ + pos: PosData; + /** + * Sets the source position of the node. + * + * @param start The start position + * @param length The length of the source + * @returns The context node + */ + setPos(start: number, length: number): Node; + /** + * Emit the HTML source representation of this node and its children. + * + * @returns HTML source string. + */ + toHTML(): string; + /** + * Visit this function and all its descendants. + * The visitor callback will be called for the node and every child in its + * subtree. It will be supplied a single argument which will be the current + * node. + * + * @param fn The visitor callback function + * @returns The context node + */ + visit(fn: Function): Node; + /** Set to 8 */ + static COMMENT_NODE: number; + /** Set to 9 */ + static DOCUMENT_NODE: number; + /** Set to 1 */ + static ELEMENT_NODE: number; + /** Set to -3 */ + static EXTENDED_NODE: number; + /** Set to -2 */ + static HIDDEN_NODE: number; + /** Set to 0 */ + static NODE: number; + /** Set to -1 */ + static RAW_NODE: number; + /** Set to 3 */ + static TEXT_NODE: number; +} + +/** Textile VDOM Element node. */ +export declare class Element extends Node { + /** + * Constructs a new Element. + * + * @param tagName A tag name for the element + * @param attr A dictionary of attributes + */ + constructor(tagName: string, attr: Record); + /** + * Appends a node as a direct child of the current element. + * + * @param node The node to add + * @returns The argument node is returned unchanged. + */ + appendChild(node: Node): Node; + attr: Record; + children: Array; + /** The first child of this element. */ + firstChild: (Node | undefined); + /** + * Read an attribute of this element. + * + * @param name The name of the attribute + * @returns The attribute value + */ + getAttribute(name: string): (string | null); + /** + * Insert a node immediatly before another node + * + * @param newNode The new node to insert + * @param referenceNode The node which to insert before + * @returns The newly inserted node + */ + insertBefore(newNode: Node, referenceNode: Node): Node; + /** TypeID of node */ + nodeType: number; + /** Position data for the node */ + pos: PosData; + /** + * Add or drop tab indentation levels within the element. + * + * @param shiftBy How much to increase/decrease the intentation. + * @returns The current element. + */ + reIndent(shiftBy: number): Element; + /** + * Removes a child from the current element. + * + * @param oldNode The node that should be detachde from this parent + * @returns The detached node + */ + removeChild(oldNode: Node): Node; + /** + * Apply a set attributes onto this element. + * + * @param attr A dict of attributes to apply + */ + setAttr(attr: Record): void; + /** + * Set the attribute of this element. + * + * @param name The name of the attribute + * @param value The attribute value + */ + setAttribute(name: string, value: (string | null)): void; + /** + * Sets the source position of the node. + * + * @param start The start position + * @param length The length of the source + * @returns The context node + */ + setPos(start: number, length: number): Node; + tagName: string; + /** + * Emit the HTML source representation of this node and its children. + * + * @returns HTML source string. + */ + toHTML(): string; + /** + * Visit this function and all its descendants. + * The visitor callback will be called for the node and every child in its + * subtree. It will be supplied a single argument which will be the current + * node. + * + * @param fn The visitor callback function + * @returns The context node + */ + visit(fn: Function): Node; + /** Set to 8 */ + static COMMENT_NODE: number; + /** Set to 9 */ + static DOCUMENT_NODE: number; + /** Set to 1 */ + static ELEMENT_NODE: number; + /** Set to -3 */ + static EXTENDED_NODE: number; + /** Set to -2 */ + static HIDDEN_NODE: number; + /** Set to 0 */ + static NODE: number; + /** Set to -1 */ + static RAW_NODE: number; + /** Set to 3 */ + static TEXT_NODE: number; +} + +/** + * Textile VDOM extended node container. + * A container for the nodes that are a part of the same extended block. + */ +export declare class ExtendedNode extends Node { + /** + * Appends a node as a direct child of the current node. + * + * @param node The node to add + * @returns The argument node is returned unchanged. + */ + appendChild(node: Node): Node; + children: Array; + /** TypeID of node */ + nodeType: number; + /** Position data for the node */ + pos: PosData; + /** + * Sets the source position of the node. + * + * @param start The start position + * @param length The length of the source + * @returns The context node + */ + setPos(start: number, length: number): Node; + /** + * Emit the HTML source representation of this node and its children. + * + * @returns HTML source string. + */ + toHTML(): string; + /** + * Visit this function and all its descendants. + * The visitor callback will be called for the node and every child in its + * subtree. It will be supplied a single argument which will be the current + * node. + * + * @param fn The visitor callback function + * @returns The context node + */ + visit(fn: Function): Node; + /** Set to 8 */ + static COMMENT_NODE: number; + /** Set to 9 */ + static DOCUMENT_NODE: number; + /** Set to 1 */ + static ELEMENT_NODE: number; + /** Set to -3 */ + static EXTENDED_NODE: number; + /** Set to -2 */ + static HIDDEN_NODE: number; + /** Set to 0 */ + static NODE: number; + /** Set to -1 */ + static RAW_NODE: number; + /** Set to 3 */ + static TEXT_NODE: number; +} + +/** + * Textile VDOM hidden node. + * This node type is used to capture things that appear in the + * textile markup, but do not need to be processed or rendered. + */ +export declare class HiddenNode extends Node { + /** + * Constructs a new HiddenNode + * + * @param data The node's string data + */ + constructor(data: string); + data: string; + /** TypeID of node */ + nodeType: number; + /** Position data for the node */ + pos: PosData; + /** + * Sets the source position of the node. + * + * @param start The start position + * @param length The length of the source + * @returns The context node + */ + setPos(start: number, length: number): Node; + /** + * Emit the HTML source representation of this node and its children. + * + * @returns HTML source string. + */ + toHTML(): string; + /** + * Visit this function and all its descendants. + * The visitor callback will be called for the node and every child in its + * subtree. It will be supplied a single argument which will be the current + * node. + * + * @param fn The visitor callback function + * @returns The context node + */ + visit(fn: Function): Node; + /** Set to 8 */ + static COMMENT_NODE: number; + /** Set to 9 */ + static DOCUMENT_NODE: number; + /** Set to 1 */ + static ELEMENT_NODE: number; + /** Set to -3 */ + static EXTENDED_NODE: number; + /** Set to -2 */ + static HIDDEN_NODE: number; + /** Set to 0 */ + static NODE: number; + /** Set to -1 */ + static RAW_NODE: number; + /** Set to 3 */ + static TEXT_NODE: number; +} + +/** A basic textile VDOC node. */ +export declare class Node { + /** TypeID of node */ + nodeType: number; + /** Position data for the node */ + pos: PosData; + /** + * Sets the source position of the node. + * + * @param start The start position + * @param length The length of the source + * @returns The context node + */ + setPos(start: number, length: number): Node; + /** + * Emit the HTML source representation of this node and its children. + * + * @returns HTML source string. + */ + toHTML(): string; + /** + * Visit this function and all its descendants. + * The visitor callback will be called for the node and every child in its + * subtree. It will be supplied a single argument which will be the current + * node. + * + * @param fn The visitor callback function + * @returns The context node + */ + visit(fn: Function): Node; + /** Set to 8 */ + static COMMENT_NODE: number; + /** Set to 9 */ + static DOCUMENT_NODE: number; + /** Set to 1 */ + static ELEMENT_NODE: number; + /** Set to -3 */ + static EXTENDED_NODE: number; + /** Set to -2 */ + static HIDDEN_NODE: number; + /** Set to 0 */ + static NODE: number; + /** Set to -1 */ + static RAW_NODE: number; + /** Set to 3 */ + static TEXT_NODE: number; +} + +/** + * Textile VDOM raw-text node. + * Essentially this is the same as a TextNode except it does not merge with + * textnodes, and is not post-processed by glyph replacers etc. + */ +export declare class RawNode extends Node { + /** + * Constructs a new RawNode + * + * @param data The node's string data + */ + constructor(data: string); + data: string; + /** TypeID of node */ + nodeType: number; + /** Position data for the node */ + pos: PosData; + /** + * Sets the source position of the node. + * + * @param start The start position + * @param length The length of the source + * @returns The context node + */ + setPos(start: number, length: number): Node; + /** + * Emit the HTML source representation of this node and its children. + * + * @returns HTML source string. + */ + toHTML(): string; + /** + * Visit this function and all its descendants. + * The visitor callback will be called for the node and every child in its + * subtree. It will be supplied a single argument which will be the current + * node. + * + * @param fn The visitor callback function + * @returns The context node + */ + visit(fn: Function): Node; + /** Set to 8 */ + static COMMENT_NODE: number; + /** Set to 9 */ + static DOCUMENT_NODE: number; + /** Set to 1 */ + static ELEMENT_NODE: number; + /** Set to -3 */ + static EXTENDED_NODE: number; + /** Set to -2 */ + static HIDDEN_NODE: number; + /** Set to 0 */ + static NODE: number; + /** Set to -1 */ + static RAW_NODE: number; + /** Set to 3 */ + static TEXT_NODE: number; +} + +/** Textile VDOM text node. */ +export declare class TextNode extends Node { + /** + * Constructs a new TextNode + * + * @param data The node's string data + */ + constructor(data: string); + data: string; + /** TypeID of node */ + nodeType: number; + /** Position data for the node */ + pos: PosData; + /** + * Sets the source position of the node. + * + * @param start The start position + * @param length The length of the source + * @returns The context node + */ + setPos(start: number, length: number): Node; + /** + * Emit the HTML source representation of this node and its children. + * + * @returns HTML source string. + */ + toHTML(): string; + /** + * Visit this function and all its descendants. + * The visitor callback will be called for the node and every child in its + * subtree. It will be supplied a single argument which will be the current + * node. + * + * @param fn The visitor callback function + * @returns The context node + */ + visit(fn: Function): Node; + /** Set to 8 */ + static COMMENT_NODE: number; + /** Set to 9 */ + static DOCUMENT_NODE: number; + /** Set to 1 */ + static ELEMENT_NODE: number; + /** Set to -3 */ + static EXTENDED_NODE: number; + /** Set to -2 */ + static HIDDEN_NODE: number; + /** Set to 0 */ + static NODE: number; + /** Set to -1 */ + static RAW_NODE: number; + /** Set to 3 */ + static TEXT_NODE: number; +} + +/** + * Parse Textile markup and return a "VDOM" tree. + * + * @param source The source transmit + * @param options Parsing options + * @param [options.allowed_block_tags] Which HTML tags in the document trigger HTML parsing (def: div, blockquote, ...) + * @param [options.auto_backlink=true] Automatically backlink footnotes, regardless of syntax used + * @param [options.blocked_uri] A list of blocked href protocols (def: javascript, vbscript, data) + * @param [options.breaks=true] Convert single-line linebreaks to
        + * @param [options.glyph_entities=true] Convert entity markup (->) to glyphs (→) + * @param [options.id_prefix=true] Footnotes and endnote HTML IDs are prefixed with a string (as set here) or number (if true) + * @returns A textile Document node + */ +export declare function parseTree(source: string, options: { + /** Which HTML tags in the document trigger HTML parsing (def: div, blockquote, ...) */ + allowed_block_tags?: Array; + /** Automatically backlink footnotes, regardless of syntax used */ + auto_backlink?: boolean; + /** A list of blocked href protocols (def: javascript, vbscript, data) */ + blocked_uri?: Array; + /** Convert single-line linebreaks to
        */ + breaks?: boolean; + /** Convert entity markup (->) to glyphs (→) */ + glyph_entities?: boolean; + /** Footnotes and endnote HTML IDs are prefixed with a string (as set here) or number (if true) */ + id_prefix?: (boolean | string); +}): Document; + +/** + * Convert Textile markup to HTML markup. + * + * @param source The source transmit + * @param options Parsing options + * @param [options.allowed_block_tags] Which HTML tags in the document trigger HTML parsing (def: div, blockquote, ...) + * @param [options.auto_backlink=true] Automatically backlink footnotes, regardless of syntax used + * @param [options.blocked_uri] A list of blocked href protocols (def: javascript, vbscript, data) + * @param [options.breaks=true] Convert single-line linebreaks to
        + * @param [options.glyph_entities=true] Convert entity markup (->) to glyphs (→) + * @param [options.id_prefix=true] Footnotes and endnote HTML IDs are prefixed with a string (as set here) or number (if true) + * @returns HTML source string + */ +export declare function textile(source: string, options: { + /** Which HTML tags in the document trigger HTML parsing (def: div, blockquote, ...) */ + allowed_block_tags?: Array; + /** Automatically backlink footnotes, regardless of syntax used */ + auto_backlink?: boolean; + /** A list of blocked href protocols (def: javascript, vbscript, data) */ + blocked_uri?: Array; + /** Convert single-line linebreaks to
        */ + breaks?: boolean; + /** Convert entity markup (->) to glyphs (→) */ + glyph_entities?: boolean; + /** Footnotes and endnote HTML IDs are prefixed with a string (as set here) or number (if true) */ + id_prefix?: (boolean | string); +}): string; + +/** Offsets in the Textile source for this node */ +export declare type PosData = { + /** Where the node ends */ + end?: number; + /** Where the node starts */ + start?: number; +}; + diff --git a/tsd.json b/tsd.json new file mode 100644 index 0000000..ab07f5f --- /dev/null +++ b/tsd.json @@ -0,0 +1,12 @@ +{ + "source": { + "includePattern": ".+\\.js(doc|x)?$", + "excludePattern": "((^|\\/|\\\\)_|spec\\.js$)" + }, + "opts": { + "template": "node_modules/@borgar/jsdoc-tsmd", + "destination": "console", + "output": "typescript", + "validate": true + } +} diff --git a/webpack.config.js b/webpack.config.js index 2df350d..595a4e2 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,7 +1,7 @@ -const path = require('path'); -const TerserPlugin = require('terser-webpack-plugin'); +import path from 'path'; +import TerserPlugin from 'terser-webpack-plugin'; -module.exports = { +export default { mode: 'production', entry: path.resolve('./src/index.js'), devtool: 'source-map', From d3919d06bb70a5407cd85068912162f002844647 Mon Sep 17 00:00:00 2001 From: Borgar Date: Fri, 8 Sep 2023 17:47:57 +0000 Subject: [PATCH 35/35] Update web editor --- docs/app.css | 178 +++++++++++++++++++++++------------------------- docs/app.js | 11 ++- docs/index.html | 43 ++++++------ 3 files changed, 110 insertions(+), 122 deletions(-) diff --git a/docs/app.css b/docs/app.css index 8f8af8d..90492ce 100644 --- a/docs/app.css +++ b/docs/app.css @@ -11,15 +11,14 @@ body { padding: 0; height: 100%; - display: flex; - flex-direction: column; - align-content: stretch; - -} - -body > * { - flex: 0 1 auto; - align-self: auto; + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 55px 25px 1fr; + gap: 0px 6px; + grid-template-areas: + "header header" + "txHead oHead" + "txBody oBody"; } body > h1 { @@ -27,86 +26,59 @@ body > h1 { margin: 0; font-size: 20px; color: #444; + grid-area: header; } -textarea { - font-family: "andale mono", "lucida console", monospace; - font-size: 12px; - display: block; - resize: none; -} - -.row { - margin: 0 0; - - flex: 1 1 auto; - align-self: stretch; - - display: flex; - flex-direction: row; - flex-wrap: nowrap; - align-items: stretch; -} - -.col { - position: relative; - box-sizing: border-box; - margin: 0 1rem 0 0; - padding: 0; - width: 50%; - - flex: 1 1 auto; - align-self: stretch; -} -.col:first-child { - margin: 0 1rem 0 1rem; +#tx_hd { + grid-area: txHead; } -.col { - display: flex; - flex-direction: column; - align-content: stretch; +#tx_body { + grid-area: txBody; + margin-top: -1px; + border-top: 1px solid #aaa; } -.col .hd { - flex: 0 1 auto; - align-self: auto; +#o_hd { + grid-area: oHead; } -.col > div, .col textarea { - flex: 1 1 auto; - align-self: stretch; +#o_body { + grid-area: oBody; + overflow: auto; + margin-top: -1px; + border-top: 1px solid #aaa; } - -label { - display: block; - padding: 4px 0; - font-weight: bold; - color: #777; -} -.tools { - position: absolute; - top: 0; - right: 0; - padding: 0; +#tx_body > * { + height: 100%; + box-sizing: border-box; + background: white; + font-family: consolas, "andale mono", "lucida console", monospace; + resize: none; + padding: 1rem; + width: 100%; + border: 0; + line-height: 1.25; + font-size: 14px; + outline: none; } - -.panel { - background: #fff; - border: 1px solid #aaaaaa; - outline: none; - display: block; - margin: 0; - padding: 4px; +#o_body > * { box-sizing: border-box; -} -#text_preview { - overflow: auto; + background: white; + padding: 1rem; + width: 100%; + border: 0; + color: #444; + min-height: 100%; } -#md_input { - background: #f6f6f6; +#syntax_guide, +#html_output { + white-space: pre-wrap; + font-size: 14px; + font-family: consolas, "andale mono", "lucida console", monospace; + line-height: 1.25; } #syntax_guide, @@ -114,22 +86,23 @@ label { display: none; } - -#credit1 { - background: url(http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png) -27px -15px no-repeat; +.td_hd { + position: relative; +} +.tools { position: absolute; - top: 0; - right: 0; - text-indent: -999em; - display: block; - overflow: hidden; - height: 108px; - width: 108px; - zoom: .8; + bottom: 2px; + right: 16px; + padding: 0; } - -#foot { - min-height: 1rem; +.tools button { + border: 0; + background: white; + color: #444; + padding: 2px 10px; + border-radius: 12px; + border-bottom: 1px solid #aaa; + cursor: pointer; } @@ -137,34 +110,47 @@ label { padding: 0; margin: 0; list-style: none; + height: 100%; + box-sizing: border-box; + padding-left: 10px; } .tab li { display: inline-block; + height: 100%; + box-sizing: border-box; } +.tab li label, .tab li a { + height: 100%; display: block; + box-sizing: border-box; padding: 4px 10px; text-decoration: none; color: #999; background: #eee; margin: 0 1px; } +.tab .current label, .tab .current a { color: #555; background: #fff; padding-bottom: 5px; - margin: -1px 0; + margin: 0; border: 1px solid #aaa; + border-bottom: 1px solid #fff; + z-index: 213; + position: relative; } #text_preview { - padding: 0 1em 4px 1em; - color: #444; - font-size: 13px; + font-size: 16px; line-height: 1.4; } +#text_preview > *:first-child { + margin-top: 0; +} #text_preview h1 { line-height: 1.1; font-size: 2em; @@ -195,10 +181,15 @@ label { #text_preview table { border-collapse : collapse; } +#text_preview th { + text-align: left; +} #text_preview table th, #text_preview table td { padding : 4px 8px; border : 1px solid #aaa; + text-align: left; + vertical-align : top; } #text_preview ul { margin-left: 0; @@ -222,3 +213,4 @@ label { text-transform: lowercase; letter-spacing: .1em; } + diff --git a/docs/app.js b/docs/app.js index a7d084c..138bb95 100644 --- a/docs/app.js +++ b/docs/app.js @@ -1,6 +1,5 @@ /* globals document fetch textile localStorage setTimeout clearTimeout */ (function () { - function getElm (selector) { return document.querySelector(selector); } @@ -47,7 +46,7 @@ processing_time = endTime - startTime; text_preview.innerHTML = html; - html_output.value = html; + html_output.textContent = html; // save last output text to storage if we have it if (!input.value || input.value === help_text) { @@ -59,7 +58,6 @@ } - // $('.tab').minitabs(); const tabs = Array.from(document.querySelectorAll('.tab a')); tabs.forEach(d => { d.addEventListener('click', e => { @@ -76,7 +74,7 @@ let convertTextTimer; - attach('#tx_input', 'keyup', e => { + attach('#tx_input', 'keyup', () => { clearTimeout(convertTextTimer); const defer_time = Math.min(processing_time, max_delay); convertTextTimer = setTimeout(convert_text, defer_time); @@ -92,7 +90,7 @@ // load syntax guide loadText('syntax.txt', txt => { - getElm('#syntax_guide').value = txt; + getElm('#syntax_guide').textContent = txt; }); // load help text @@ -103,10 +101,9 @@ } }); - attach('button.clear', 'click', e => { + attach('button.clear', 'click', () => { convert_text(''); }); convert_text(); - })(); diff --git a/docs/index.html b/docs/index.html index d2ffc59..135c965 100644 --- a/docs/index.html +++ b/docs/index.html @@ -10,31 +10,30 @@

        Textile live web editor

        -
        -
        -
        - - - - -
        - -
        +
        -
        - -
        - - -
        + + + +
        -
        a