├── .gitignore ├── .jshintrc ├── LICENSE ├── README.md ├── index.html ├── kaku.sublime-syntax ├── old ├── parser_v1.js ├── parser_v2.js └── parser_v3.js ├── package.json ├── pnpm-lock.yaml ├── src ├── module.js └── parser.js ├── test.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | /* 3 | * ENVIRONMENTS 4 | * ================= 5 | */ 6 | 7 | // Define globals exposed by modern browsers. 8 | "browser": true, 9 | 10 | // Define globals exposed by jQuery. 11 | "jquery": true, 12 | 13 | // Define globals exposed by Node.js. 14 | "node": true, 15 | 16 | // Allow ES6. 17 | "esversion": 10, 18 | 19 | "parserOptions": 20 | { 21 | "ecmaVersion": 2019 22 | } 23 | 24 | /* 25 | * ENFORCING OPTIONS 26 | * ================= 27 | */ 28 | 29 | // Force all variable names to use either camelCase style or UPPER_CASE 30 | // with underscores. 31 | "camelcase": true, 32 | 33 | // Prohibit use of == and != in favor of === and !==. 34 | "eqeqeq": true, 35 | 36 | // Enforce tab width of 2 spaces. 37 | "indent": 2, 38 | 39 | // Prohibit use of a variable before it is defined. 40 | "latedef": true, 41 | 42 | // Enforce line length to 100 characters 43 | "maxlen": 120, 44 | 45 | // Require capitalized names for constructor functions. 46 | "newcap": true, 47 | 48 | // Enforce use of single quotation marks for strings. 49 | "quotmark": "single", 50 | 51 | // Enforce placing 'use strict' at the top function scope 52 | "strict": true, 53 | 54 | // Prohibit use of explicitly undeclared variables. 55 | "undef": true, 56 | 57 | // Warn when variables are defined but never used. 58 | "unused": true, 59 | 60 | // Tolerate Automatic Semicolon Insertion (no semicolons). 61 | "asi": true, 62 | 63 | /* 64 | * RELAXING OPTIONS 65 | * ================= 66 | */ 67 | 68 | // Suppress warnings about == null comparisons. 69 | "eqnull": true 70 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | ANTI-CAPITALIST SOFTWARE LICENSE (v 1.4) 2 | 3 | Copyright © 2020 Thomasorus 4 | 5 | This is anti-capitalist software, released for free use by individuals and organizations that do not operate by capitalist principles. 6 | 7 | Permission is hereby granted, free of charge, to any person or organization (the "User") obtaining a copy of this software and associated documentation files (the "Software"), to use, copy, modify, merge, distribute, and/or sell copies of the Software, subject to the following conditions: 8 | 9 | 1. The above copyright notice and this permission notice shall be included in all copies or modified versions of the Software. 10 | 11 | 2. The User is one of the following: 12 | a. An individual person, laboring for themselves 13 | b. A non-profit organization 14 | c. An educational institution 15 | d. An organization that seeks shared profit for all of its members, and allows non-members to set the cost of their labor 16 | 17 | 3. If the User is an organization with owners, then all owners are workers and all workers are owners with equal equity and/or equal vote. 18 | 19 | 4. If the User is an organization, then the User is not law enforcement or military, or working for or under either. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kaku 書く 2 | 3 | Kaku (write) is my own markup language. It's inspired by Markdown with a few modification for quotes, links, images and lists handling. It was created to fit my needs. This repositoty contains a parser for Kaku. 4 | 5 | ## Branches 6 | 7 | The parser exists in two branches: 8 | 9 | - the `master` branch is the classic parser as explained below 10 | - the `responsive-lazy-images` is a modified version with more advanced image management, but severely opiniated so it can work with [Ronbun](https://github.com/Thomasorus/Ronbun) 11 | 12 | If you are new to Kaku, use the master branch! 13 | 14 | ## License 15 | 16 | Kaku 書く is a free to use by individuals and organizations that do not operate by capitalist principles. For more information see the [license](LICENSE) file. 17 | 18 | ## Syntax 19 | 20 | Kaku uses some syntax from Markdown for basic text transformation. However it uses an array like declaration with special characters for things like quotes, links and images. 21 | 22 | ### Typography 23 | 24 | #### Title 1 25 | 26 | Example : `# Title` 27 | 28 | Will return: 29 | 30 | ```Html 31 |

Title

32 | ``` 33 | 34 | #### Title 2 35 | 36 | Example : `## Title` 37 | 38 | Will return: 39 | 40 | ```Html 41 |

Title

42 | ``` 43 | 44 | Same for titles 3 to 6... 45 | 46 | #### Bold 47 | 48 | Example : `*bold*` 49 | 50 | Will return: 51 | 52 | ```Html 53 | bold 54 | ``` 55 | 56 | #### Emphasis 57 | 58 | Example : `_emphasis_` 59 | 60 | Will return: 61 | 62 | ```Html 63 | emphasis 64 | ``` 65 | 66 | #### Code 67 | 68 | Example : `code` 69 | 70 | Will return: 71 | 72 | ```Html 73 | code 74 | ``` 75 | 76 | #### Code Block 77 | 78 | Example: 79 | 80 | \`\`\` 81 | 82 | This is some code 83 | 84 | \`\`\` 85 | 86 | Will return: 87 | 88 | ``` 89 | This is some code 90 | ``` 91 | 92 | #### Striked throught 93 | 94 | Example : ~strike~ 95 | 96 | Will return: 97 | 98 | ```Html 99 | strike 100 | ``` 101 | 102 | ### Quotes 103 | 104 | Quotes can take up to 4 arguments: 105 | 106 | 1. The quote itself 107 | 2. The author 108 | 3. The source of the quote 109 | 4. The url of the quote 110 | 111 | Example: `(quote: I am the quoted text! author: Author of quote source: Source of quote link: url_of_quote` 112 | 113 | Will return: 114 | 115 | ```Html 116 |
117 |
118 | And even, quotes! 119 |
120 |
—Author, Source of quote
121 |
122 | 123 | ``` 124 | 125 | ### Links 126 | 127 | Links can take up to 3 arguments: 128 | 129 | 1. The link url 130 | 2. The text of the link 131 | 3. The text for the accessibility label (optionnal) 132 | 4. The text for the title (optionnal) 133 | 134 | Example: `(link: https://github.com/Thomasorus/Kaku text: Check the this link to the repo! label: Link to Kaku's repo title: Hover title)` 135 | 136 | Will return: 137 | 138 | ```Html 139 | Check the this link to the repo! 140 | ``` 141 | 142 | ### Images 143 | 144 | Images can take up to 3 arguments: 145 | 146 | 1. The image name or url 147 | 2. The image alt text for accessibility 148 | 3. The image caption (optionnal, will create a figure and figcaption) 149 | 150 | Image with alt text : `(image: img_url, alt: the alternate text)` 151 | 152 | Will return; 153 | 154 | ```Html 155 | the alternate text 156 | ``` 157 | 158 | Image with caption : `(image: img_url, alt: the alternate text figcaption: the text under the image)` 159 | 160 | Will return: 161 | 162 | ```Html 163 |
164 | the alternate text 165 |
the text under the image
166 |
167 | ``` 168 | 169 | ### Bullet lists 170 | 171 | ```html 172 | - AAA 173 | - BBB 174 | - CCC 175 | ``` 176 | 177 | Will return: 178 | 179 | ```html 180 | 185 | ``` 186 | 187 | ### Ordered lists 188 | 189 | ```html 190 | + Number 1 191 | + Number 1 192 | + Number 1 193 | ``` 194 | 195 | Will return: 196 | 197 | ```html 198 |
    199 |
  1. Number 1
  2. 200 |
  3. Number 2
  4. 201 |
  5. Number 3
  6. 202 |
203 | ``` 204 | 205 | ### Descriptive lists 206 | 207 | ```html 208 | ? Term 1 : definition 1 209 | ? Term 2 : definition 2 210 | ``` 211 | 212 | Will return: 213 | 214 | ```html 215 |
216 |
Term 1
217 |
definition 1
218 |
Term 2
219 |
definition 2
220 |
221 | ``` 222 | 223 | ### Videos and audios 224 | 225 | Videos can take up to 2 arguments: 226 | 227 | 1. The video name or url (mp3 only for audio) 228 | 2. If a video you can add a `g` parameter to use the video as a gif 229 | 230 | Classic video: `(video: videoUrl)` 231 | 232 | Will return: 233 | 234 | ```Html 235 | 236 | ``` 237 | 238 | Video as gif: `(video: videoUrl autoplay)` 239 | 240 | Will return: 241 | 242 | ```Html 243 | 244 | ``` 245 | 246 | Audio: `(audio: audioUrl)` 247 | 248 | Will return; 249 | 250 | ```Html 251 | 252 | ``` 253 | 254 | Note: all audio and video elements come with the `preload="metadata"` attribute to help slower connections. 255 | 256 | ### HR 257 | 258 | `----` 259 | 260 | Will return: 261 | 262 | `
` 263 | 264 | ## Run tests 265 | 266 | This projects comes with unit tests. To run them: 267 | 268 | - Install with `yarn` 269 | - Configure tests in `test.js` 270 | - Run tests with `npx ava` 271 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Kaku 8 | 9 | 71 | 72 | 73 |
74 | 122 |
123 | 124 | 125 | 141 | 142 | -------------------------------------------------------------------------------- /kaku.sublime-syntax: -------------------------------------------------------------------------------- 1 | %YAML 1.2 2 | --- 3 | file_extensions: 4 | - kaku 5 | scope: license 6 | contexts: 7 | main: 8 | - match: '^(NAME:)|(HOST:)|(BREF:)|(PRIV:)|(BODY:)|(MENU:)' 9 | scope: constant.other 10 | 11 | - match: '^(====)' 12 | scope: constant.language 13 | 14 | - match: '^(----)' 15 | scope: constant.language 16 | 17 | - match: '^(#|##|###|####|#####|######) .*$' 18 | captures: 19 | 1: entity.name.function 20 | 21 | - match: '(\(link:).*?(text:).*?(?<=)(title:).*?(?<=)(label:).*?(\)\n|\) )' 22 | captures: 23 | 1: constant.character 24 | 2: constant.character 25 | 3: constant.character 26 | 4: constant.character 27 | 5: constant.character 28 | 29 | - match: '(\(image:).*?(alt:).*?(?<=)(figcaption:).*?(\)\n|\) )' 30 | captures: 31 | 1: constant.character 32 | 2: constant.character 33 | 3: constant.character 34 | 4: constant.character 35 | 36 | - match: '(\(video:).*?(?<=)(autoplay).*?(?<=)(figcaption:).*?(\)\n|\) )' 37 | captures: 38 | 1: constant.character 39 | 2: constant.character 40 | 3: constant.character 41 | 4: constant.character 42 | 43 | - match: '(\(audio\:).*?(\)[\s\n])' 44 | captures: 45 | 1: constant.character 46 | 2: constant.character 47 | 48 | - match: '(\*|\_|\~|\`)(?!\`).*?(\*|\_|\~|\`)' 49 | captures: 50 | 1: entity.name.function 51 | 2: entity.name.function 52 | 53 | - match: '(^\?).*?(\:)' 54 | captures: 55 | 1: storage.modifier 56 | 2: storage.modifier 57 | 58 | - match: '(^\-|^\+)' 59 | captures: 60 | 1: storage.modifier 61 | 62 | - match: '^(\`\`\`\n)' 63 | scope: entity.name.function 64 | 65 | 66 | # Common generic scopes used in sublime-syntax / color-scheme 67 | # comment 68 | # comment.line 69 | # constant 70 | # constant.character 71 | # constant.character.escape 72 | # constant.language 73 | # constant.numeric 74 | # constant.other 75 | # constant.other.symbol 76 | # entity 77 | # entity.name.class 78 | # entity.name.filename 79 | # entity.name.function 80 | # entity.name.tag 81 | # entity.name.type.class 82 | # entity.other.attribute-name 83 | # entity.other.inherited-class 84 | # invalid 85 | # invalid.deprecated 86 | # keyword 87 | # keyword.control 88 | # keyword.control.import 89 | # keyword.operator 90 | # keyword.other 91 | # punctuation 92 | # punctuation.definition.string.begin 93 | # punctuation.definition.string.end 94 | # punctuation.definition.tag 95 | # punctuation.definition.tag.begin 96 | # punctuation.definition.tag.end 97 | # punctuation.definition.variable 98 | # storage 99 | # storage.modifier 100 | # storage.type 101 | # storage.type.class 102 | # storage.type.function 103 | # string 104 | # string.regexp 105 | # support 106 | # support.class 107 | # support.constant 108 | # support.function 109 | # support.other.variable 110 | # support.type 111 | # variable 112 | # variable.function 113 | # variable.language 114 | # variable.other 115 | # variable.parameter 116 | 117 | 118 | # font 119 | # license 120 | # source.actionscript.2 121 | # source.applescript 122 | # source.asp 123 | # source.c 124 | # source.c++ 125 | # source.camlp4.ocaml 126 | # source.clojure 127 | # source.cmake 128 | # source.coffee 129 | # source.cs 130 | # source.css 131 | # source.d 132 | # source.diff 133 | # source.disasm 134 | # source.dockerfile 135 | # source.dosbatch 136 | # source.dot 137 | # source.erlang 138 | # source.gdb.session 139 | # source.gdbregs 140 | # source.git 141 | # source.go 142 | # source.gradle 143 | # source.groovy 144 | # source.gruntfile.coffee 145 | # source.gruntfile.js 146 | # source.gulpfile.coffee 147 | # source.gulpfile.js 148 | # source.haskell 149 | # source.ini 150 | # source.ini.editorconfig 151 | # source.jade 152 | # source.java 153 | # source.java-props 154 | # source.jl 155 | # source.js 156 | # source.js.rails 157 | # source.json 158 | # source.json.bower 159 | # source.json.npm 160 | # source.jsx 161 | # source.less 162 | # source.lisp 163 | # source.lua 164 | # source.makefile 165 | # source.matlab 166 | # source.nant-build 167 | # source.objc 168 | # source.objc++ 169 | # source.ocaml 170 | # source.ocamllex 171 | # source.ocamlyacc 172 | # source.pascal 173 | # source.perl 174 | # source.php 175 | # source.procfile 176 | # source.puppet 177 | # source.pyjade 178 | # source.python 179 | # source.qml 180 | # source.r 181 | # source.r-console 182 | # source.regexp 183 | # source.regexp.python 184 | # source.ruby 185 | # source.ruby.rails 186 | # source.rust 187 | # source.sass 188 | # source.scala 189 | # source.scss 190 | # source.shell 191 | # source.sql 192 | # source.sql.ruby 193 | # source.stylus 194 | # source.swift 195 | # source.tcl 196 | # source.yaml 197 | # source.zen.5a454e6772616d6d6172 198 | # text.bibtex 199 | # text.haml 200 | # text.html.asp 201 | # text.html.basic 202 | # text.html.erlang.yaws 203 | # text.html.javadoc 204 | # text.html.jsp 205 | # text.html.markdown 206 | # text.html.markdown.multimarkdown 207 | # text.html.mustache 208 | # text.html.ruby 209 | # text.html.tcl 210 | # text.html.textile 211 | # text.html.twig 212 | # text.log.latex 213 | # text.plain 214 | # text.restructuredtext 215 | # text.slim 216 | # text.tex 217 | # text.tex.latex 218 | # text.tex.latex.beamer 219 | # text.tex.latex.haskell 220 | # text.tex.latex.memoir 221 | # text.tex.latex.rd 222 | # text.tex.math 223 | # text.todo 224 | # text.xml 225 | # text.xml.xsl 226 | -------------------------------------------------------------------------------- /old/parser_v1.js: -------------------------------------------------------------------------------- 1 | let tempList = [] 2 | let currentList = null 3 | 4 | function parser(text) { 5 | 6 | //Splitting text and removing empty strings 7 | text = text.split(/\n/g).filter(Boolean) 8 | Object.keys(text).forEach(k => (!text[k] && text[k] !== undefined) && delete text[k]); 9 | 10 | let finalText = "" 11 | let count = 0; 12 | 13 | text.forEach(el => { 14 | el = el.trim() 15 | let firstChar = el.charAt(0) 16 | let content = null 17 | count++ 18 | 19 | switch (firstChar) { 20 | case "#": 21 | content = createTitle(el) 22 | break; 23 | case ">": 24 | content = createQuote(el) 25 | break; 26 | case "[": 27 | content = createImages(el) 28 | break; 29 | case "-": 30 | case "?": 31 | case "+": 32 | //If new list or adding el to existing list 33 | if (firstChar === currentList && count !== text.length || currentList === null && count !== text.length) { 34 | populateList(firstChar, el) 35 | } 36 | //If new el is different, finish list 37 | else if (firstChar !== currentList && currentList.length > 0) { 38 | content = createList(tempList) 39 | } 40 | //If new el is the last of page, finish list 41 | else { 42 | populateList(firstChar, el) 43 | content = createList(tempList) 44 | } 45 | break; 46 | default: 47 | content = endList(el) 48 | break; 49 | } 50 | if (content) { 51 | if (content.includes("*")) { 52 | content = createBold(content) 53 | } 54 | 55 | if (content.includes("_")) { 56 | content = createItalic(content) 57 | } 58 | 59 | if (content.includes("{")) { 60 | content = createLink(content) 61 | } 62 | 63 | if (content.includes("`")) { 64 | content = createCode(content) 65 | } 66 | 67 | finalText = finalText + content 68 | } 69 | }); 70 | return finalText 71 | } 72 | 73 | 74 | function getListType(tempList) { 75 | type = ""; 76 | if (tempList.length > 0) { 77 | switch (tempList[0].charAt(0)) { 78 | case "-": 79 | type = 'ul' 80 | break; 81 | case "?": 82 | type = 'dl' 83 | break; 84 | default: 85 | type = 'ol' 86 | break; 87 | } 88 | } else type = "ul" 89 | return type 90 | } 91 | 92 | function createList(el) { 93 | type = getListType(tempList) 94 | if (type === "ul" || type === "ol") { 95 | let listItems = "" 96 | tempList.forEach(item => { 97 | listItems = listItems + `
  • ${item.substring(1).trim()}
  • ` 98 | }); 99 | tempList = [] 100 | listItems = `<${type}>${listItems}\n` 101 | return listItems 102 | } else { 103 | let listItems = "" 104 | tempList.forEach(item => { 105 | item = item.split(":") 106 | const term = item[0].substring(1).trim() 107 | const definition = item[1].trim() 108 | listItems = listItems + `
    ${term}
    ${definition}
    ` 109 | }); 110 | tempList = [] 111 | listItems = `<${type}>${listItems}\n` 112 | return listItems 113 | } 114 | } 115 | 116 | function endList(el) { 117 | if (tempList.length === 0) { 118 | return createParagraph(el) 119 | } else { 120 | return createList(el) + endList(el) 121 | } 122 | } 123 | 124 | function createParagraph(el) { 125 | return `

    ${el}

    ` 126 | } 127 | 128 | function populateList(firstChar, el) { 129 | tempList.push(el) 130 | currentList = firstChar 131 | } 132 | 133 | function createTitle(el) { 134 | const count = (el.match(/#/g)).length; 135 | return `${el.substring(1 + count)}` 136 | } 137 | 138 | function createQuote(el) { 139 | return `
    ${el.substring(2)}
    ` 140 | } 141 | 142 | function createImages(el) { 143 | let imgElem = el.substring( 144 | el.lastIndexOf("[") + 1, 145 | el.lastIndexOf("]") 146 | ); 147 | el = el.split(/\[|\]/) 148 | let elem = ""; 149 | el.forEach(e => { 150 | if (e === imgElem) { 151 | e = e.split(",") 152 | let alt = e.length > 1 ? `alt="${e[1].trim()}"` : "" 153 | let img = `` 154 | 155 | if (e.length > 2) { 156 | let caption = `
    ${e[2].trim()}
    ` 157 | e = `
    ${img}${caption}
    ` 158 | } else { 159 | e = img 160 | } 161 | } 162 | elem = elem + e 163 | }); 164 | return elem 165 | } 166 | 167 | function createLink(el) { 168 | let linkElem = el.substring( 169 | el.lastIndexOf("{") + 1, 170 | el.lastIndexOf("}") 171 | ); 172 | el = el.split(/{|}/) 173 | 174 | let elem = ""; 175 | el.forEach(e => { 176 | if (e === linkElem) { 177 | e = e.split(",") 178 | const aria = e.length > 2 ? `aria-label="${e[2].trim()}"` : "" 179 | e = `${e[1].trim()}` 180 | } 181 | elem = elem + e 182 | }); 183 | return elem 184 | } 185 | 186 | function createBold(el) { 187 | el = el.split(/(\*)/) 188 | let opening = true 189 | let elem = ""; 190 | el.forEach(e => { 191 | if (e === "*" && opening === true) { 192 | e = "" 193 | opening = false 194 | } else if (e === "*" && opening === false) { 195 | e = "" 196 | opening = true 197 | } 198 | elem = elem + e 199 | }); 200 | return elem 201 | } 202 | 203 | function createItalic(el) { 204 | el = el.split(/(_)/) 205 | let opening = true 206 | let elem = ""; 207 | el.forEach(e => { 208 | if (e === "_" && opening === true) { 209 | e = "" 210 | opening = false 211 | } else if (e === "_" && opening === false) { 212 | e = "" 213 | opening = true 214 | } 215 | elem = elem + e 216 | }); 217 | return elem 218 | } 219 | 220 | function createCode(el) { 221 | el = el.split(/(`)/) 222 | let opening = true 223 | let elem = ""; 224 | el.forEach(e => { 225 | if (e === "`" && opening === true) { 226 | e = "" 227 | opening = false 228 | } else if (e === "`" && opening === false) { 229 | e = "" 230 | opening = true 231 | } 232 | elem = elem + e 233 | }); 234 | return elem 235 | } 236 | 237 | 238 | 239 | //DEMO STUFF 240 | const formated = document.querySelector('.normal'); 241 | const htmldemo = document.querySelector('.html'); 242 | let demo = document.querySelector('textarea'); 243 | 244 | document.addEventListener('keyup', triggerDemo) 245 | 246 | function triggerDemo() { 247 | let demotext = parser(demo.value) 248 | formated.innerHTML = "" 249 | htmldemo.textContent = "" 250 | formated.innerHTML = demotext; 251 | htmldemo.textContent = demotext; 252 | } 253 | 254 | triggerDemo() -------------------------------------------------------------------------------- /old/parser_v2.js: -------------------------------------------------------------------------------- 1 | const symbol = [ 2 | "\n", 3 | "*", 4 | "_", 5 | "`", 6 | ">", 7 | "#", 8 | "[", 9 | "]", 10 | "{", 11 | "}", 12 | "-", 13 | "?", 14 | "+" 15 | ] 16 | 17 | function isProcessing(status) { 18 | return status.bold || status.italic || status.code || status.blockquote || status.title || status.image || status.link || status.list 19 | } 20 | 21 | function assert(condition) { 22 | if (condition) { 23 | return 24 | } else { 25 | throw "Assert error"; 26 | } 27 | } 28 | 29 | 30 | function parser(text) { 31 | 32 | //outbuffer is the final rendered text 33 | const outBuffer = []; 34 | 35 | //acc contains text being processed 36 | const acc = []; 37 | 38 | let titleAcc = []; 39 | let titleCount = ""; 40 | 41 | const listAcc = [] 42 | let listType = undefined 43 | 44 | 45 | //status define what type of text is being processed 46 | const status = { 47 | paragraph: false, 48 | bold: false, 49 | italic: false, 50 | code: false, 51 | citation: false, 52 | space: false, 53 | image: false, 54 | link: false, 55 | list: false, 56 | linebreak: false 57 | }; 58 | 59 | 60 | //Replacing line break chars 61 | const formated = text.replace(/\r\n/g, "\n").replace(/\n\s*\n/g, '\n'); 62 | 63 | 64 | for (var i = 0; i < formated.length; ++i) { 65 | const c = formated[i] 66 | 67 | //If acc has value and no process is running 68 | //Then push acc content into outBuffer 69 | //Reset acc content 70 | if(listAcc.length <= 0) { 71 | 72 | if (acc.length && !isProcessing(status)) { 73 | outBuffer.push(acc.join('')) 74 | acc.length = 0 75 | } 76 | } 77 | 78 | //Check if character contains one of the symbols 79 | const s = symbol.find(x => x == c) 80 | 81 | //If not a syntax character 82 | //And we're not processing anything 83 | //Then push the symbol inside outbuffer 84 | // PLUS checks if new line or end of document 85 | if (!s && !isProcessing(status)) { 86 | status.linebreak = false 87 | if(listAcc.length) { 88 | const lst = createList(listAcc, listType); 89 | outBuffer.push(lst) 90 | listAcc.length = 0 91 | listType = undefined 92 | } 93 | if ((i + 1) == (formated.length) && status.paragraph) { 94 | const p = `${c}

    `; 95 | status.paragraph = false; 96 | outBuffer.push(p) 97 | continue; 98 | } 99 | if (!status.paragraph && c !== " ") { 100 | status.paragraph = true; 101 | const p = `

    ${c}`; 102 | outBuffer.push(p) 103 | continue; 104 | } 105 | 106 | outBuffer.push(c) 107 | continue; 108 | } 109 | 110 | //If a syntax character 111 | if (!!s) { 112 | //Then which one? 113 | switch (s) { 114 | // Symbols with similar starter and ender 115 | case "*": 116 | //If status is true 117 | //End it 118 | //Add closing html into acc 119 | if (status.bold) { 120 | status.bold = false 121 | acc.push('') 122 | } 123 | //if status is true 124 | //start it 125 | //Push starting html into acc 126 | else { 127 | acc.push('') 128 | status.bold = true 129 | } 130 | if ((i + 1) == (formated.length) && status.paragraph) { 131 | acc.push('

    ') 132 | status.paragraph = false; 133 | if (acc.length && !isProcessing(status)) { 134 | outBuffer.push(acc.join('').trim()) 135 | } 136 | } 137 | continue 138 | case "_": 139 | if (status.link || status.image) { 140 | acc.push(c) 141 | continue 142 | } 143 | if (status.italic) { 144 | status.italic = false 145 | acc.push('') 146 | } 147 | else { 148 | acc.push('') 149 | status.italic = true 150 | } 151 | if ((i + 1) == (formated.length) && status.paragraph) { 152 | acc.push('

    ') 153 | status.paragraph = false; 154 | if (acc.length && !isProcessing(status)) { 155 | outBuffer.push(acc.join('').trim()) 156 | } 157 | } 158 | continue; 159 | case "`": 160 | if (status.code) { 161 | status.code = false 162 | acc.push('') 163 | } else { 164 | acc.push('') 165 | status.code = true 166 | } 167 | if ((i + 1) == (formated.length) && status.paragraph) { 168 | acc.push('

    ') 169 | status.paragraph = false; 170 | if (acc.length && !isProcessing(status)) { 171 | outBuffer.push(acc.join('').trim()) 172 | } 173 | } 174 | continue; 175 | case ">": 176 | if (!status.blockquote) { 177 | acc.push('
    ') 178 | status.blockquote = true 179 | status.space = true 180 | } 181 | continue; 182 | case "#": 183 | titleAcc.push('#') 184 | status.title = true 185 | status.space = true 186 | continue; 187 | case "[": 188 | acc.push(c) 189 | status.image = true 190 | continue 191 | case "]": 192 | acc.push(c) 193 | const img = createImages(acc.join('')) 194 | acc.splice(0, acc.length) 195 | acc.push(img) 196 | status.image = false 197 | if ((i + 1) == (formated.length)) { 198 | if (acc.length && !isProcessing(status)) { 199 | outBuffer.push(acc.join('').trim()) 200 | } 201 | } 202 | continue 203 | case "{": 204 | acc.push(c) 205 | status.link = true 206 | continue 207 | case "}": 208 | acc.push(c) 209 | const link = createLink(acc.join('')) 210 | acc.splice(0, acc.length) 211 | acc.push(link) 212 | status.link = false 213 | if ((i + 1) == (formated.length)) { 214 | if (acc.length && !isProcessing(status)) { 215 | outBuffer.push(acc.join('').trim()) 216 | } 217 | } 218 | continue 219 | case "-": 220 | case "?": 221 | case "+": 222 | if (status.linebreak) { 223 | if(status.list === false && listType !== c) { 224 | const lst = createList(listAcc, listType); 225 | outBuffer.push(lst) 226 | listAcc.length = 0 227 | listType = undefined 228 | } 229 | status.list = true 230 | listType = c 231 | acc.push(c) 232 | 233 | 234 | } else { 235 | outBuffer.push(c) 236 | } 237 | 238 | continue 239 | case "\n": 240 | status.linebreak = true 241 | 242 | if (status.paragraph) { 243 | acc.push('

    ') 244 | status.paragraph = false 245 | } 246 | if (status.blockquote) { 247 | acc.push('
    ') 248 | status.blockquote = false 249 | if ((i + 1) == (formated.length)) { 250 | if (acc.length && !isProcessing(status)) { 251 | outBuffer.push(acc.join('').trim()) 252 | } 253 | } 254 | } 255 | if (status.title) { 256 | acc.push(``) 257 | status.title = false 258 | if ((i + 1) == (formated.length)) { 259 | if (acc.length && !isProcessing(status)) { 260 | outBuffer.push(acc.join('').trim()) 261 | } 262 | } 263 | } 264 | if (status.list) { 265 | acc.push(c) 266 | listAcc.push(acc.join('').trim()) 267 | status.list = false 268 | acc.length = 0 269 | } 270 | continue; 271 | } 272 | } 273 | 274 | 275 | //If acc is not empty 276 | //And we're not processing anything special anymore 277 | //Then push the acc content inside outBuffer 278 | if (acc.length && !isProcessing(status)) { 279 | outBuffer.push(acc.join('').trim()) 280 | } 281 | 282 | //If we are processing something 283 | //Then push it into acc 284 | //And don't send it yet to outbuffer 285 | assert(isProcessing(status) === true) 286 | 287 | if (status.space) { 288 | status.space = false 289 | } else { 290 | if (titleAcc.length) { 291 | acc.push(`${c}`) 292 | titleCount = titleAcc.length 293 | titleAcc.length = [] 294 | } else if (status.blockquote) { 295 | acc.push(c) 296 | } else { 297 | acc.push(c) 298 | } 299 | } 300 | } 301 | 302 | 303 | //Retunr completed text 304 | return outBuffer.join(''); 305 | } 306 | 307 | function createImages(el) { 308 | let imgElem = el.substring( 309 | el.lastIndexOf("[") + 1, 310 | el.lastIndexOf("]") 311 | ); 312 | el = el.split(/\[|\]/) 313 | let elem = ""; 314 | el.forEach(e => { 315 | if (e === imgElem) { 316 | e = e.split(",") 317 | let alt = e.length > 1 ? ` alt="${e[1].trim()}"` : "" 318 | let img = `` 319 | 320 | if (e.length > 2) { 321 | let caption = `
    ${e[2].trim()}
    ` 322 | e = `
    ${img}${caption}
    ` 323 | } else { 324 | e = img 325 | } 326 | } 327 | elem = elem + e 328 | }); 329 | return elem 330 | } 331 | 332 | function createLink(el) { 333 | let linkElem = el.substring( 334 | el.lastIndexOf("{") + 1, 335 | el.lastIndexOf("}") 336 | ); 337 | el = el.split(/{|}/) 338 | 339 | let elem = ""; 340 | el.forEach(e => { 341 | if (e === linkElem) { 342 | e = e.split(",") 343 | const aria = e.length > 2 ? ` aria-label="${e[2].trim()}"` : "" 344 | e = `${e[1].trim()}` 345 | } 346 | elem = elem + e 347 | }); 348 | return elem 349 | } 350 | 351 | 352 | function createList(tempList, type) { 353 | 354 | let listType = undefined 355 | switch (type) { 356 | case "-": 357 | listType = "ul" 358 | break; 359 | case "+": 360 | listType = "ol" 361 | break; 362 | case "?": 363 | listType = "dl" 364 | break; 365 | } 366 | 367 | if (listType === "ul" || listType === "ol") { 368 | let listItems = "" 369 | tempList.forEach(item => { 370 | listItems = listItems + `
  • ${item.substring(1).trim()}
  • ` 371 | }); 372 | tempList = [] 373 | listItems = `<${listType}>${listItems}\n` 374 | return listItems 375 | } else { 376 | let listItems = "" 377 | tempList.forEach(item => { 378 | item = item.split(":") 379 | const term = item[0].substring(1).trim() 380 | const definition = item[1].trim() 381 | listItems = listItems + `
    ${term}
    ${definition}
    ` 382 | }); 383 | tempList = [] 384 | listItems = `<${listType}>${listItems}\n` 385 | return listItems 386 | } 387 | } 388 | 389 | // //DEMO STUFF 390 | const formated = document.querySelector('article'); 391 | let demo = document.querySelector('textarea'); 392 | 393 | document.addEventListener('keyup', triggerDemo) 394 | 395 | function triggerDemo() { 396 | let demotext = parser(demo.value) 397 | formated.innerHTML = "" 398 | formated.innerHTML = demotext; 399 | } 400 | 401 | triggerDemo() -------------------------------------------------------------------------------- /old/parser_v3.js: -------------------------------------------------------------------------------- 1 | const pregReplace = function (a, b, c, d) { 2 | void 0 === d && (d = -1); 3 | var e = a.substr(a.lastIndexOf(a[0]) + 1), 4 | f = a.substr(1, a.lastIndexOf(a[0]) - 1), 5 | g = RegExp(f, e), 6 | i = [], 7 | j = 0, 8 | k = 0, 9 | l = c, 10 | m = []; 11 | if (-1 === d) { 12 | do m = g.exec(c), null !== m && i.push(m); while (null !== m && -1 !== e.indexOf("g")) 13 | } else i.push(g.exec(c)); 14 | for (j = i.length - 1; j > -1; j--) { 15 | for (m = b, k = i[j].length; k > -1; k--) m = m.replace("${" + k + "}", i[j][k]).replace("$" + k, i[j][k]).replace("\\" + k, i[j][k]); 16 | l = l.replace(i[j][0], m) 17 | } 18 | return l 19 | }; 20 | 21 | const parser = function (str) { 22 | const rules = [ 23 | // headers 24 | ['/(#+)(.*)/g', function (chars, item) { 25 | const level = chars.length 26 | return createTitle(level, item) 27 | }], 28 | // code fences 29 | ['/`{3,}(?!.*`)/g', '
    ', '
    '], 30 | // code 31 | ['/(\\`)(.*?)\\1/g', function (char, item) { 32 | const code = item.replace(/<') 33 | return `${code}` 34 | }], 35 | // images 36 | ['/\\n\\[([^\\[]+)\\]/g', function (item) { 37 | return createImages(item) 38 | }], 39 | // videos 40 | ['/\\n\\|([^\\|]+)\\|/g', function (item) { 41 | return createMultimedia(item)/ 42 | }], 43 | // link 44 | ['/\\{([^\\{]+)\\}/g', function (item) { 45 | return createLink(item) 46 | }], 47 | // bold 48 | ['/(\\*)(.*?)\\1/g', '\\2'], 49 | // emphasis 50 | ['/(\\_)(.*?)\\1/g', '\\2'], 51 | // strike 52 | ['/(\\~)(.*?)\\1/g', '\\2'], 53 | // unordered list 54 | ['/\\n\\-(.*)/g', function (item) { 55 | return '
      \n
    • ' + item.trim() + '
    • \n
    ' 56 | }], 57 | // ordered list 58 | ['/\\n\\+(.*)/g', function (item) { 59 | return '
      \n
    1. ' + item.trim() + '
    2. \n
    ' 60 | }], 61 | // definition list 62 | ['/\\n\\?(.*)/g', function (item) { 63 | return createDefinitionList(item) 64 | }], 65 | // blockquote 66 | ['/\\n\\>(.*)/g', function (item) { 67 | return createQuote(item) 68 | }], 69 | // paragraphs 70 | ['/\\n[^\\n]+\\n/g', function (line) { 71 | if (codeblock) { 72 | line = line.trimStart() 73 | if (line.includes('<')) { 74 | line = line.replace(/<') 75 | return line 76 | } else { 77 | return line 78 | } 79 | } 80 | line = line.trim() 81 | if (line[0] === '<' && !codeblock) { 82 | return line 83 | } 84 | return `\n

    ${line}

    \n` 85 | }] 86 | ] 87 | const fixes = [ 88 | ['/<\\/ul>\n
      /g', '\n'], 89 | ['/<\\/ol>\n
        /g', '\n'], 90 | ['/<\\/dl>\n
        /g', '\n'], 91 | ['/<\\/blockquote>\n
        /g', '\n'], 92 | ['/
        \n/g', '
        '],
         93 |       ['/<\\/em>/g', '__'],
         94 |       ['/<em></em>/g', '__'],
         95 |       ['/ <strong> /g', ' * '],
         96 |       ['/ <\\/strong> /g', ' * '],
         97 |       ['/ /g', '   ']
         98 |     ]
         99 |   
        100 |     let codeblock = false
        101 |   
        102 |     const parseLine = function (str) {
        103 |       str = `\n${str.trim()}\n`
        104 |   
        105 |       for (let i = 0, j = rules.length; i < j; i++) {
        106 |         if (typeof rules[i][1] === 'function') {
        107 |           const _flag = rules[i][0].substr(rules[i][0].lastIndexOf(rules[i][0][0]) + 1)
        108 |           const _pattern = rules[i][0].substr(1, rules[i][0].lastIndexOf(rules[i][0][0]) - 1)
        109 |           const reg = new RegExp(_pattern, _flag)
        110 |   
        111 |           const matches = [...str.matchAll(reg)]
        112 |   
        113 |           if (matches.length > 0) {
        114 |             matches.forEach(match => {
        115 |               // If more than one occurence on the same line
        116 |               if (matches.length > 1) {
        117 |                 const rule = rules[i][0].slice(0, -1)
        118 |                 if (match.length > 1) {
        119 |                   str = pregReplace(rule, rules[i][1](match[1], match[2]), str)
        120 |                 } else {
        121 |                   str = pregReplace(rule, rules[i][1](match[0]), str)
        122 |                 }
        123 |               } else {
        124 |                 // If only one occurence on the same line
        125 |                 if (match.length > 1) {
        126 |                   str = pregReplace(rules[i][0], rules[i][1](match[1], match[2]), str)
        127 |                 } else {
        128 |                   str = pregReplace(rules[i][0], rules[i][1](match[0]), str)
        129 |                 }
        130 |               }
        131 |             })
        132 |           }
        133 |         } else {
        134 |           if (str === '\n```\n' && codeblock) {
        135 |             str = rules[i][2]
        136 |             codeblock = false
        137 |           } else if (str === '\n```\n' && !codeblock) {
        138 |             str = rules[i][1]
        139 |             codeblock = true
        140 |           } else {
        141 |             str = pregReplace(rules[i][0], rules[i][1], str)
        142 |           }
        143 |         }
        144 |       }
        145 |       return str.trim()
        146 |     }
        147 |   
        148 |     str = str.split('\n')
        149 |     let rtn = []
        150 |     for (let i = 0, j = str.length; i < j; i++) {
        151 |       rtn.push(parseLine(str[i]))
        152 |     }
        153 |     rtn = rtn.join('\n')
        154 |   
        155 |     for (let i = 0, j = fixes.length; i < j; i++) {
        156 |       rtn = pregReplace(fixes[i][0], fixes[i][1], rtn)
        157 |     }
        158 |   
        159 |     return rtn
        160 |   }
        161 |   
        162 |   function extractText (text) {
        163 |     const regexuuu = /"((?:\\[\s\S]|[^\\])+?)"(?!\*)/g
        164 |     const match = text.match(regexuuu)[0].replace(/"/g, '').trim()
        165 |     return match
        166 |   }
        167 |   
        168 |   function createImages (item) {
        169 |     let el = item
        170 |     el = el.replace('[', '').replace(']', '')
        171 |     const imgArr = el.split(',')
        172 |     let imgHtml = ''
        173 |   
        174 |     if (imgArr.length === 1) {
        175 |       imgHtml = ``
        176 |     }
        177 |   
        178 |     if (imgArr.length === 2) {
        179 |       const alt = ` alt="${imgArr[1].trim()}"`
        180 |       imgHtml = ``
        181 |     }
        182 |   
        183 |     if (imgArr.length === 3) {
        184 |       const alt = ` alt="${imgArr[1].trim()}"`
        185 |       imgHtml = ``
        186 |       const caption = `
        ${extractText(el)}
        ` 187 | imgHtml = `
        ${imgHtml}${caption}
        ` 188 | } 189 | 190 | return imgHtml 191 | } 192 | 193 | function createLink (item) { 194 | let el = item 195 | el = el.replace('{', '').replace('}', '') 196 | const textLink = extractText(el) 197 | const linkElem = el.split(',') 198 | const aria = linkElem.length > 2 ? ` title="${linkElem[2].trim()}" aria-label="${linkElem[2].trim()}"` : '' 199 | const html = `${textLink}` 200 | return html 201 | } 202 | 203 | function createQuote (item) { 204 | let el = item 205 | el = el.replace(/~/g, '') 206 | const citation = extractText(el) 207 | el = el.replace(citation, '') 208 | el = el.split(',') 209 | const url = el[3] ? ` cite="${el[3].trim()}"` : '' 210 | const source = el[2] ? `, ${el[2]}` : '' 211 | const author = el[1] ? `
        —${el[1].trim()}${source}
        ` : '' 212 | const html = `

        ${citation}

        ${author}
        ` 213 | return html 214 | } 215 | 216 | function createDefinitionList (item) { 217 | item = item.split(':') 218 | const term = item[0].trim() 219 | const definition = item[1].trim() 220 | const html = `
        ${term}
        ${definition}
        ` 221 | return html 222 | } 223 | 224 | function createMultimedia (item) { 225 | let el = item 226 | el = el.split(',') 227 | const url = el[0].trim() 228 | let param = el[1] ? el[1].trim() : '' 229 | const mediaType = url.slice(-1) 230 | if (param) { 231 | if (param === 'g') { 232 | param = 'autoplay="true" playsinline="true" loop="true" mute="true" preload="metadata"' 233 | } else { 234 | param = 'controls preload="metadata"' 235 | } 236 | } else { 237 | param = 'controls preload="metadata"' 238 | } 239 | 240 | let html = '' 241 | switch (mediaType) { 242 | case '4': 243 | html = `` 244 | break 245 | case '3': 246 | html = `` 247 | break 248 | default: 249 | break 250 | } 251 | return html 252 | } 253 | 254 | function createTitle (level, item) { 255 | const count = level 256 | const title = item.trim() 257 | const kebab = toKebab(title) 258 | const link = `` 259 | const html = `${link}${title}` 260 | return html 261 | } 262 | 263 | function toKebab (text) { 264 | const toKebabCase = text && text 265 | .match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g) 266 | .map(x => x.toLowerCase()) 267 | .join('-') 268 | return toKebabCase 269 | } 270 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | {"ava": { 2 | "require": [ 3 | "esm" 4 | ] 5 | }, 6 | "devDependencies": { 7 | "ava": "^3.8.2", 8 | "esm": "^3.2.25" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | ava: ^3.8.2 5 | esm: ^3.2.25 6 | 7 | devDependencies: 8 | ava: 3.15.0 9 | esm: 3.2.25 10 | 11 | packages: 12 | 13 | /@babel/code-frame/7.16.7: 14 | resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} 15 | engines: {node: '>=6.9.0'} 16 | dependencies: 17 | '@babel/highlight': 7.16.10 18 | dev: true 19 | 20 | /@babel/helper-validator-identifier/7.16.7: 21 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 22 | engines: {node: '>=6.9.0'} 23 | dev: true 24 | 25 | /@babel/highlight/7.16.10: 26 | resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==} 27 | engines: {node: '>=6.9.0'} 28 | dependencies: 29 | '@babel/helper-validator-identifier': 7.16.7 30 | chalk: 2.4.2 31 | js-tokens: 4.0.0 32 | dev: true 33 | 34 | /@concordance/react/2.0.0: 35 | resolution: {integrity: sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA==} 36 | engines: {node: '>=6.12.3 <7 || >=8.9.4 <9 || >=10.0.0'} 37 | dependencies: 38 | arrify: 1.0.1 39 | dev: true 40 | 41 | /@nodelib/fs.scandir/2.1.5: 42 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 43 | engines: {node: '>= 8'} 44 | dependencies: 45 | '@nodelib/fs.stat': 2.0.5 46 | run-parallel: 1.2.0 47 | dev: true 48 | 49 | /@nodelib/fs.stat/2.0.5: 50 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 51 | engines: {node: '>= 8'} 52 | dev: true 53 | 54 | /@nodelib/fs.walk/1.2.8: 55 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 56 | engines: {node: '>= 8'} 57 | dependencies: 58 | '@nodelib/fs.scandir': 2.1.5 59 | fastq: 1.13.0 60 | dev: true 61 | 62 | /@sindresorhus/is/0.14.0: 63 | resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} 64 | engines: {node: '>=6'} 65 | dev: true 66 | 67 | /@szmarczak/http-timer/1.1.2: 68 | resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} 69 | engines: {node: '>=6'} 70 | dependencies: 71 | defer-to-connect: 1.1.3 72 | dev: true 73 | 74 | /@types/normalize-package-data/2.4.1: 75 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 76 | dev: true 77 | 78 | /acorn-walk/8.2.0: 79 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 80 | engines: {node: '>=0.4.0'} 81 | dev: true 82 | 83 | /acorn/8.7.0: 84 | resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} 85 | engines: {node: '>=0.4.0'} 86 | hasBin: true 87 | dev: true 88 | 89 | /aggregate-error/3.1.0: 90 | resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} 91 | engines: {node: '>=8'} 92 | dependencies: 93 | clean-stack: 2.2.0 94 | indent-string: 4.0.0 95 | dev: true 96 | 97 | /ansi-align/3.0.1: 98 | resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} 99 | dependencies: 100 | string-width: 4.2.3 101 | dev: true 102 | 103 | /ansi-regex/5.0.1: 104 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 105 | engines: {node: '>=8'} 106 | dev: true 107 | 108 | /ansi-styles/3.2.1: 109 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 110 | engines: {node: '>=4'} 111 | dependencies: 112 | color-convert: 1.9.3 113 | dev: true 114 | 115 | /ansi-styles/4.3.0: 116 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 117 | engines: {node: '>=8'} 118 | dependencies: 119 | color-convert: 2.0.1 120 | dev: true 121 | 122 | /ansi-styles/5.2.0: 123 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 124 | engines: {node: '>=10'} 125 | dev: true 126 | 127 | /anymatch/3.1.2: 128 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 129 | engines: {node: '>= 8'} 130 | dependencies: 131 | normalize-path: 3.0.0 132 | picomatch: 2.3.1 133 | dev: true 134 | 135 | /argparse/1.0.10: 136 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 137 | dependencies: 138 | sprintf-js: 1.0.3 139 | dev: true 140 | 141 | /array-find-index/1.0.2: 142 | resolution: {integrity: sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=} 143 | engines: {node: '>=0.10.0'} 144 | dev: true 145 | 146 | /array-union/2.1.0: 147 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 148 | engines: {node: '>=8'} 149 | dev: true 150 | 151 | /arrgv/1.0.2: 152 | resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==} 153 | engines: {node: '>=8.0.0'} 154 | dev: true 155 | 156 | /arrify/1.0.1: 157 | resolution: {integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=} 158 | engines: {node: '>=0.10.0'} 159 | dev: true 160 | 161 | /arrify/2.0.1: 162 | resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} 163 | engines: {node: '>=8'} 164 | dev: true 165 | 166 | /astral-regex/2.0.0: 167 | resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} 168 | engines: {node: '>=8'} 169 | dev: true 170 | 171 | /ava/3.15.0: 172 | resolution: {integrity: sha512-HGAnk1SHPk4Sx6plFAUkzV/XC1j9+iQhOzt4vBly18/yo0AV8Oytx7mtJd/CR8igCJ5p160N/Oo/cNJi2uSeWA==} 173 | engines: {node: '>=10.18.0 <11 || >=12.14.0 <12.17.0 || >=12.17.0 <13 || >=14.0.0 <15 || >=15'} 174 | hasBin: true 175 | dependencies: 176 | '@concordance/react': 2.0.0 177 | acorn: 8.7.0 178 | acorn-walk: 8.2.0 179 | ansi-styles: 5.2.0 180 | arrgv: 1.0.2 181 | arrify: 2.0.1 182 | callsites: 3.1.0 183 | chalk: 4.1.2 184 | chokidar: 3.5.3 185 | chunkd: 2.0.1 186 | ci-info: 2.0.0 187 | ci-parallel-vars: 1.0.1 188 | clean-yaml-object: 0.1.0 189 | cli-cursor: 3.1.0 190 | cli-truncate: 2.1.0 191 | code-excerpt: 3.0.0 192 | common-path-prefix: 3.0.0 193 | concordance: 5.0.4 194 | convert-source-map: 1.8.0 195 | currently-unhandled: 0.4.1 196 | debug: 4.3.4 197 | del: 6.0.0 198 | emittery: 0.8.1 199 | equal-length: 1.0.1 200 | figures: 3.2.0 201 | globby: 11.1.0 202 | ignore-by-default: 2.0.0 203 | import-local: 3.1.0 204 | indent-string: 4.0.0 205 | is-error: 2.2.2 206 | is-plain-object: 5.0.0 207 | is-promise: 4.0.0 208 | lodash: 4.17.21 209 | matcher: 3.0.0 210 | md5-hex: 3.0.1 211 | mem: 8.1.1 212 | ms: 2.1.3 213 | ora: 5.4.1 214 | p-event: 4.2.0 215 | p-map: 4.0.0 216 | picomatch: 2.3.1 217 | pkg-conf: 3.1.0 218 | plur: 4.0.0 219 | pretty-ms: 7.0.1 220 | read-pkg: 5.2.0 221 | resolve-cwd: 3.0.0 222 | slash: 3.0.0 223 | source-map-support: 0.5.21 224 | stack-utils: 2.0.5 225 | strip-ansi: 6.0.1 226 | supertap: 2.0.0 227 | temp-dir: 2.0.0 228 | trim-off-newlines: 1.0.3 229 | update-notifier: 5.1.0 230 | write-file-atomic: 3.0.3 231 | yargs: 16.2.0 232 | transitivePeerDependencies: 233 | - supports-color 234 | dev: true 235 | 236 | /balanced-match/1.0.2: 237 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 238 | dev: true 239 | 240 | /base64-js/1.5.1: 241 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 242 | dev: true 243 | 244 | /binary-extensions/2.2.0: 245 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 246 | engines: {node: '>=8'} 247 | dev: true 248 | 249 | /bl/4.1.0: 250 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 251 | dependencies: 252 | buffer: 5.7.1 253 | inherits: 2.0.4 254 | readable-stream: 3.6.0 255 | dev: true 256 | 257 | /blueimp-md5/2.19.0: 258 | resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} 259 | dev: true 260 | 261 | /boxen/5.1.2: 262 | resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} 263 | engines: {node: '>=10'} 264 | dependencies: 265 | ansi-align: 3.0.1 266 | camelcase: 6.3.0 267 | chalk: 4.1.2 268 | cli-boxes: 2.2.1 269 | string-width: 4.2.3 270 | type-fest: 0.20.2 271 | widest-line: 3.1.0 272 | wrap-ansi: 7.0.0 273 | dev: true 274 | 275 | /brace-expansion/1.1.11: 276 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 277 | dependencies: 278 | balanced-match: 1.0.2 279 | concat-map: 0.0.1 280 | dev: true 281 | 282 | /braces/3.0.2: 283 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 284 | engines: {node: '>=8'} 285 | dependencies: 286 | fill-range: 7.0.1 287 | dev: true 288 | 289 | /buffer-from/1.1.2: 290 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 291 | dev: true 292 | 293 | /buffer/5.7.1: 294 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 295 | dependencies: 296 | base64-js: 1.5.1 297 | ieee754: 1.2.1 298 | dev: true 299 | 300 | /cacheable-request/6.1.0: 301 | resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} 302 | engines: {node: '>=8'} 303 | dependencies: 304 | clone-response: 1.0.2 305 | get-stream: 5.2.0 306 | http-cache-semantics: 4.1.0 307 | keyv: 3.1.0 308 | lowercase-keys: 2.0.0 309 | normalize-url: 4.5.1 310 | responselike: 1.0.2 311 | dev: true 312 | 313 | /callsites/3.1.0: 314 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 315 | engines: {node: '>=6'} 316 | dev: true 317 | 318 | /camelcase/6.3.0: 319 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 320 | engines: {node: '>=10'} 321 | dev: true 322 | 323 | /chalk/2.4.2: 324 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 325 | engines: {node: '>=4'} 326 | dependencies: 327 | ansi-styles: 3.2.1 328 | escape-string-regexp: 1.0.5 329 | supports-color: 5.5.0 330 | dev: true 331 | 332 | /chalk/4.1.2: 333 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 334 | engines: {node: '>=10'} 335 | dependencies: 336 | ansi-styles: 4.3.0 337 | supports-color: 7.2.0 338 | dev: true 339 | 340 | /chokidar/3.5.3: 341 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 342 | engines: {node: '>= 8.10.0'} 343 | dependencies: 344 | anymatch: 3.1.2 345 | braces: 3.0.2 346 | glob-parent: 5.1.2 347 | is-binary-path: 2.1.0 348 | is-glob: 4.0.3 349 | normalize-path: 3.0.0 350 | readdirp: 3.6.0 351 | optionalDependencies: 352 | fsevents: 2.3.2 353 | dev: true 354 | 355 | /chunkd/2.0.1: 356 | resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} 357 | dev: true 358 | 359 | /ci-info/2.0.0: 360 | resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} 361 | dev: true 362 | 363 | /ci-parallel-vars/1.0.1: 364 | resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} 365 | dev: true 366 | 367 | /clean-stack/2.2.0: 368 | resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} 369 | engines: {node: '>=6'} 370 | dev: true 371 | 372 | /clean-yaml-object/0.1.0: 373 | resolution: {integrity: sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=} 374 | engines: {node: '>=0.10.0'} 375 | dev: true 376 | 377 | /cli-boxes/2.2.1: 378 | resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} 379 | engines: {node: '>=6'} 380 | dev: true 381 | 382 | /cli-cursor/3.1.0: 383 | resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} 384 | engines: {node: '>=8'} 385 | dependencies: 386 | restore-cursor: 3.1.0 387 | dev: true 388 | 389 | /cli-spinners/2.6.1: 390 | resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} 391 | engines: {node: '>=6'} 392 | dev: true 393 | 394 | /cli-truncate/2.1.0: 395 | resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} 396 | engines: {node: '>=8'} 397 | dependencies: 398 | slice-ansi: 3.0.0 399 | string-width: 4.2.3 400 | dev: true 401 | 402 | /cliui/7.0.4: 403 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 404 | dependencies: 405 | string-width: 4.2.3 406 | strip-ansi: 6.0.1 407 | wrap-ansi: 7.0.0 408 | dev: true 409 | 410 | /clone-response/1.0.2: 411 | resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} 412 | dependencies: 413 | mimic-response: 1.0.1 414 | dev: true 415 | 416 | /clone/1.0.4: 417 | resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=} 418 | engines: {node: '>=0.8'} 419 | dev: true 420 | 421 | /code-excerpt/3.0.0: 422 | resolution: {integrity: sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==} 423 | engines: {node: '>=10'} 424 | dependencies: 425 | convert-to-spaces: 1.0.2 426 | dev: true 427 | 428 | /color-convert/1.9.3: 429 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 430 | dependencies: 431 | color-name: 1.1.3 432 | dev: true 433 | 434 | /color-convert/2.0.1: 435 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 436 | engines: {node: '>=7.0.0'} 437 | dependencies: 438 | color-name: 1.1.4 439 | dev: true 440 | 441 | /color-name/1.1.3: 442 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} 443 | dev: true 444 | 445 | /color-name/1.1.4: 446 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 447 | dev: true 448 | 449 | /common-path-prefix/3.0.0: 450 | resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} 451 | dev: true 452 | 453 | /concat-map/0.0.1: 454 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 455 | dev: true 456 | 457 | /concordance/5.0.4: 458 | resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} 459 | engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} 460 | dependencies: 461 | date-time: 3.1.0 462 | esutils: 2.0.3 463 | fast-diff: 1.2.0 464 | js-string-escape: 1.0.1 465 | lodash: 4.17.21 466 | md5-hex: 3.0.1 467 | semver: 7.3.5 468 | well-known-symbols: 2.0.0 469 | dev: true 470 | 471 | /configstore/5.0.1: 472 | resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} 473 | engines: {node: '>=8'} 474 | dependencies: 475 | dot-prop: 5.3.0 476 | graceful-fs: 4.2.9 477 | make-dir: 3.1.0 478 | unique-string: 2.0.0 479 | write-file-atomic: 3.0.3 480 | xdg-basedir: 4.0.0 481 | dev: true 482 | 483 | /convert-source-map/1.8.0: 484 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} 485 | dependencies: 486 | safe-buffer: 5.1.2 487 | dev: true 488 | 489 | /convert-to-spaces/1.0.2: 490 | resolution: {integrity: sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=} 491 | engines: {node: '>= 4'} 492 | dev: true 493 | 494 | /crypto-random-string/2.0.0: 495 | resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} 496 | engines: {node: '>=8'} 497 | dev: true 498 | 499 | /currently-unhandled/0.4.1: 500 | resolution: {integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o=} 501 | engines: {node: '>=0.10.0'} 502 | dependencies: 503 | array-find-index: 1.0.2 504 | dev: true 505 | 506 | /date-time/3.1.0: 507 | resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} 508 | engines: {node: '>=6'} 509 | dependencies: 510 | time-zone: 1.0.0 511 | dev: true 512 | 513 | /debug/4.3.4: 514 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 515 | engines: {node: '>=6.0'} 516 | peerDependencies: 517 | supports-color: '*' 518 | peerDependenciesMeta: 519 | supports-color: 520 | optional: true 521 | dependencies: 522 | ms: 2.1.2 523 | dev: true 524 | 525 | /decompress-response/3.3.0: 526 | resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=} 527 | engines: {node: '>=4'} 528 | dependencies: 529 | mimic-response: 1.0.1 530 | dev: true 531 | 532 | /deep-extend/0.6.0: 533 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 534 | engines: {node: '>=4.0.0'} 535 | dev: true 536 | 537 | /defaults/1.0.3: 538 | resolution: {integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=} 539 | dependencies: 540 | clone: 1.0.4 541 | dev: true 542 | 543 | /defer-to-connect/1.1.3: 544 | resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} 545 | dev: true 546 | 547 | /del/6.0.0: 548 | resolution: {integrity: sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==} 549 | engines: {node: '>=10'} 550 | dependencies: 551 | globby: 11.1.0 552 | graceful-fs: 4.2.9 553 | is-glob: 4.0.3 554 | is-path-cwd: 2.2.0 555 | is-path-inside: 3.0.3 556 | p-map: 4.0.0 557 | rimraf: 3.0.2 558 | slash: 3.0.0 559 | dev: true 560 | 561 | /dir-glob/3.0.1: 562 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 563 | engines: {node: '>=8'} 564 | dependencies: 565 | path-type: 4.0.0 566 | dev: true 567 | 568 | /dot-prop/5.3.0: 569 | resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} 570 | engines: {node: '>=8'} 571 | dependencies: 572 | is-obj: 2.0.0 573 | dev: true 574 | 575 | /duplexer3/0.1.4: 576 | resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=} 577 | dev: true 578 | 579 | /emittery/0.8.1: 580 | resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} 581 | engines: {node: '>=10'} 582 | dev: true 583 | 584 | /emoji-regex/8.0.0: 585 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 586 | dev: true 587 | 588 | /end-of-stream/1.4.4: 589 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 590 | dependencies: 591 | once: 1.4.0 592 | dev: true 593 | 594 | /equal-length/1.0.1: 595 | resolution: {integrity: sha1-IcoRLUirJLTh5//A5TOdMf38J0w=} 596 | engines: {node: '>=4'} 597 | dev: true 598 | 599 | /error-ex/1.3.2: 600 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 601 | dependencies: 602 | is-arrayish: 0.2.1 603 | dev: true 604 | 605 | /escalade/3.1.1: 606 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 607 | engines: {node: '>=6'} 608 | dev: true 609 | 610 | /escape-goat/2.1.1: 611 | resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} 612 | engines: {node: '>=8'} 613 | dev: true 614 | 615 | /escape-string-regexp/1.0.5: 616 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} 617 | engines: {node: '>=0.8.0'} 618 | dev: true 619 | 620 | /escape-string-regexp/2.0.0: 621 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 622 | engines: {node: '>=8'} 623 | dev: true 624 | 625 | /escape-string-regexp/4.0.0: 626 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 627 | engines: {node: '>=10'} 628 | dev: true 629 | 630 | /esm/3.2.25: 631 | resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} 632 | engines: {node: '>=6'} 633 | dev: true 634 | 635 | /esprima/4.0.1: 636 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 637 | engines: {node: '>=4'} 638 | hasBin: true 639 | dev: true 640 | 641 | /esutils/2.0.3: 642 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 643 | engines: {node: '>=0.10.0'} 644 | dev: true 645 | 646 | /fast-diff/1.2.0: 647 | resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} 648 | dev: true 649 | 650 | /fast-glob/3.2.11: 651 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 652 | engines: {node: '>=8.6.0'} 653 | dependencies: 654 | '@nodelib/fs.stat': 2.0.5 655 | '@nodelib/fs.walk': 1.2.8 656 | glob-parent: 5.1.2 657 | merge2: 1.4.1 658 | micromatch: 4.0.5 659 | dev: true 660 | 661 | /fastq/1.13.0: 662 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 663 | dependencies: 664 | reusify: 1.0.4 665 | dev: true 666 | 667 | /figures/3.2.0: 668 | resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} 669 | engines: {node: '>=8'} 670 | dependencies: 671 | escape-string-regexp: 1.0.5 672 | dev: true 673 | 674 | /fill-range/7.0.1: 675 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 676 | engines: {node: '>=8'} 677 | dependencies: 678 | to-regex-range: 5.0.1 679 | dev: true 680 | 681 | /find-up/3.0.0: 682 | resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} 683 | engines: {node: '>=6'} 684 | dependencies: 685 | locate-path: 3.0.0 686 | dev: true 687 | 688 | /find-up/4.1.0: 689 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 690 | engines: {node: '>=8'} 691 | dependencies: 692 | locate-path: 5.0.0 693 | path-exists: 4.0.0 694 | dev: true 695 | 696 | /fs.realpath/1.0.0: 697 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} 698 | dev: true 699 | 700 | /fsevents/2.3.2: 701 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 702 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 703 | os: [darwin] 704 | requiresBuild: true 705 | dev: true 706 | optional: true 707 | 708 | /function-bind/1.1.1: 709 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 710 | dev: true 711 | 712 | /get-caller-file/2.0.5: 713 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 714 | engines: {node: 6.* || 8.* || >= 10.*} 715 | dev: true 716 | 717 | /get-stream/4.1.0: 718 | resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} 719 | engines: {node: '>=6'} 720 | dependencies: 721 | pump: 3.0.0 722 | dev: true 723 | 724 | /get-stream/5.2.0: 725 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} 726 | engines: {node: '>=8'} 727 | dependencies: 728 | pump: 3.0.0 729 | dev: true 730 | 731 | /glob-parent/5.1.2: 732 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 733 | engines: {node: '>= 6'} 734 | dependencies: 735 | is-glob: 4.0.3 736 | dev: true 737 | 738 | /glob/7.2.0: 739 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 740 | dependencies: 741 | fs.realpath: 1.0.0 742 | inflight: 1.0.6 743 | inherits: 2.0.4 744 | minimatch: 3.1.2 745 | once: 1.4.0 746 | path-is-absolute: 1.0.1 747 | dev: true 748 | 749 | /global-dirs/3.0.0: 750 | resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} 751 | engines: {node: '>=10'} 752 | dependencies: 753 | ini: 2.0.0 754 | dev: true 755 | 756 | /globby/11.1.0: 757 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 758 | engines: {node: '>=10'} 759 | dependencies: 760 | array-union: 2.1.0 761 | dir-glob: 3.0.1 762 | fast-glob: 3.2.11 763 | ignore: 5.2.0 764 | merge2: 1.4.1 765 | slash: 3.0.0 766 | dev: true 767 | 768 | /got/9.6.0: 769 | resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} 770 | engines: {node: '>=8.6'} 771 | dependencies: 772 | '@sindresorhus/is': 0.14.0 773 | '@szmarczak/http-timer': 1.1.2 774 | cacheable-request: 6.1.0 775 | decompress-response: 3.3.0 776 | duplexer3: 0.1.4 777 | get-stream: 4.1.0 778 | lowercase-keys: 1.0.1 779 | mimic-response: 1.0.1 780 | p-cancelable: 1.1.0 781 | to-readable-stream: 1.0.0 782 | url-parse-lax: 3.0.0 783 | dev: true 784 | 785 | /graceful-fs/4.2.9: 786 | resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} 787 | dev: true 788 | 789 | /has-flag/3.0.0: 790 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} 791 | engines: {node: '>=4'} 792 | dev: true 793 | 794 | /has-flag/4.0.0: 795 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 796 | engines: {node: '>=8'} 797 | dev: true 798 | 799 | /has-yarn/2.1.0: 800 | resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} 801 | engines: {node: '>=8'} 802 | dev: true 803 | 804 | /has/1.0.3: 805 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 806 | engines: {node: '>= 0.4.0'} 807 | dependencies: 808 | function-bind: 1.1.1 809 | dev: true 810 | 811 | /hosted-git-info/2.8.9: 812 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 813 | dev: true 814 | 815 | /http-cache-semantics/4.1.0: 816 | resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} 817 | dev: true 818 | 819 | /ieee754/1.2.1: 820 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 821 | dev: true 822 | 823 | /ignore-by-default/2.0.0: 824 | resolution: {integrity: sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==} 825 | engines: {node: '>=10 <11 || >=12 <13 || >=14'} 826 | dev: true 827 | 828 | /ignore/5.2.0: 829 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} 830 | engines: {node: '>= 4'} 831 | dev: true 832 | 833 | /import-lazy/2.1.0: 834 | resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=} 835 | engines: {node: '>=4'} 836 | dev: true 837 | 838 | /import-local/3.1.0: 839 | resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 840 | engines: {node: '>=8'} 841 | hasBin: true 842 | dependencies: 843 | pkg-dir: 4.2.0 844 | resolve-cwd: 3.0.0 845 | dev: true 846 | 847 | /imurmurhash/0.1.4: 848 | resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} 849 | engines: {node: '>=0.8.19'} 850 | dev: true 851 | 852 | /indent-string/4.0.0: 853 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 854 | engines: {node: '>=8'} 855 | dev: true 856 | 857 | /inflight/1.0.6: 858 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} 859 | dependencies: 860 | once: 1.4.0 861 | wrappy: 1.0.2 862 | dev: true 863 | 864 | /inherits/2.0.4: 865 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 866 | dev: true 867 | 868 | /ini/1.3.8: 869 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 870 | dev: true 871 | 872 | /ini/2.0.0: 873 | resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} 874 | engines: {node: '>=10'} 875 | dev: true 876 | 877 | /irregular-plurals/3.3.0: 878 | resolution: {integrity: sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==} 879 | engines: {node: '>=8'} 880 | dev: true 881 | 882 | /is-arrayish/0.2.1: 883 | resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} 884 | dev: true 885 | 886 | /is-binary-path/2.1.0: 887 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 888 | engines: {node: '>=8'} 889 | dependencies: 890 | binary-extensions: 2.2.0 891 | dev: true 892 | 893 | /is-ci/2.0.0: 894 | resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} 895 | hasBin: true 896 | dependencies: 897 | ci-info: 2.0.0 898 | dev: true 899 | 900 | /is-core-module/2.8.1: 901 | resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} 902 | dependencies: 903 | has: 1.0.3 904 | dev: true 905 | 906 | /is-error/2.2.2: 907 | resolution: {integrity: sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==} 908 | dev: true 909 | 910 | /is-extglob/2.1.1: 911 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 912 | engines: {node: '>=0.10.0'} 913 | dev: true 914 | 915 | /is-fullwidth-code-point/3.0.0: 916 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 917 | engines: {node: '>=8'} 918 | dev: true 919 | 920 | /is-glob/4.0.3: 921 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 922 | engines: {node: '>=0.10.0'} 923 | dependencies: 924 | is-extglob: 2.1.1 925 | dev: true 926 | 927 | /is-installed-globally/0.4.0: 928 | resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} 929 | engines: {node: '>=10'} 930 | dependencies: 931 | global-dirs: 3.0.0 932 | is-path-inside: 3.0.3 933 | dev: true 934 | 935 | /is-interactive/1.0.0: 936 | resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} 937 | engines: {node: '>=8'} 938 | dev: true 939 | 940 | /is-npm/5.0.0: 941 | resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} 942 | engines: {node: '>=10'} 943 | dev: true 944 | 945 | /is-number/7.0.0: 946 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 947 | engines: {node: '>=0.12.0'} 948 | dev: true 949 | 950 | /is-obj/2.0.0: 951 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} 952 | engines: {node: '>=8'} 953 | dev: true 954 | 955 | /is-path-cwd/2.2.0: 956 | resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} 957 | engines: {node: '>=6'} 958 | dev: true 959 | 960 | /is-path-inside/3.0.3: 961 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 962 | engines: {node: '>=8'} 963 | dev: true 964 | 965 | /is-plain-object/5.0.0: 966 | resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} 967 | engines: {node: '>=0.10.0'} 968 | dev: true 969 | 970 | /is-promise/4.0.0: 971 | resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} 972 | dev: true 973 | 974 | /is-typedarray/1.0.0: 975 | resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} 976 | dev: true 977 | 978 | /is-unicode-supported/0.1.0: 979 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} 980 | engines: {node: '>=10'} 981 | dev: true 982 | 983 | /is-yarn-global/0.3.0: 984 | resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} 985 | dev: true 986 | 987 | /js-string-escape/1.0.1: 988 | resolution: {integrity: sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=} 989 | engines: {node: '>= 0.8'} 990 | dev: true 991 | 992 | /js-tokens/4.0.0: 993 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 994 | dev: true 995 | 996 | /js-yaml/3.14.1: 997 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 998 | hasBin: true 999 | dependencies: 1000 | argparse: 1.0.10 1001 | esprima: 4.0.1 1002 | dev: true 1003 | 1004 | /json-buffer/3.0.0: 1005 | resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} 1006 | dev: true 1007 | 1008 | /json-parse-better-errors/1.0.2: 1009 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} 1010 | dev: true 1011 | 1012 | /json-parse-even-better-errors/2.3.1: 1013 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1014 | dev: true 1015 | 1016 | /keyv/3.1.0: 1017 | resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} 1018 | dependencies: 1019 | json-buffer: 3.0.0 1020 | dev: true 1021 | 1022 | /latest-version/5.1.0: 1023 | resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} 1024 | engines: {node: '>=8'} 1025 | dependencies: 1026 | package-json: 6.5.0 1027 | dev: true 1028 | 1029 | /lines-and-columns/1.2.4: 1030 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1031 | dev: true 1032 | 1033 | /load-json-file/5.3.0: 1034 | resolution: {integrity: sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==} 1035 | engines: {node: '>=6'} 1036 | dependencies: 1037 | graceful-fs: 4.2.9 1038 | parse-json: 4.0.0 1039 | pify: 4.0.1 1040 | strip-bom: 3.0.0 1041 | type-fest: 0.3.1 1042 | dev: true 1043 | 1044 | /locate-path/3.0.0: 1045 | resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} 1046 | engines: {node: '>=6'} 1047 | dependencies: 1048 | p-locate: 3.0.0 1049 | path-exists: 3.0.0 1050 | dev: true 1051 | 1052 | /locate-path/5.0.0: 1053 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1054 | engines: {node: '>=8'} 1055 | dependencies: 1056 | p-locate: 4.1.0 1057 | dev: true 1058 | 1059 | /lodash/4.17.21: 1060 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1061 | dev: true 1062 | 1063 | /log-symbols/4.1.0: 1064 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} 1065 | engines: {node: '>=10'} 1066 | dependencies: 1067 | chalk: 4.1.2 1068 | is-unicode-supported: 0.1.0 1069 | dev: true 1070 | 1071 | /lowercase-keys/1.0.1: 1072 | resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} 1073 | engines: {node: '>=0.10.0'} 1074 | dev: true 1075 | 1076 | /lowercase-keys/2.0.0: 1077 | resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} 1078 | engines: {node: '>=8'} 1079 | dev: true 1080 | 1081 | /lru-cache/6.0.0: 1082 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1083 | engines: {node: '>=10'} 1084 | dependencies: 1085 | yallist: 4.0.0 1086 | dev: true 1087 | 1088 | /make-dir/3.1.0: 1089 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 1090 | engines: {node: '>=8'} 1091 | dependencies: 1092 | semver: 6.3.0 1093 | dev: true 1094 | 1095 | /map-age-cleaner/0.1.3: 1096 | resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} 1097 | engines: {node: '>=6'} 1098 | dependencies: 1099 | p-defer: 1.0.0 1100 | dev: true 1101 | 1102 | /matcher/3.0.0: 1103 | resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} 1104 | engines: {node: '>=10'} 1105 | dependencies: 1106 | escape-string-regexp: 4.0.0 1107 | dev: true 1108 | 1109 | /md5-hex/3.0.1: 1110 | resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} 1111 | engines: {node: '>=8'} 1112 | dependencies: 1113 | blueimp-md5: 2.19.0 1114 | dev: true 1115 | 1116 | /mem/8.1.1: 1117 | resolution: {integrity: sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==} 1118 | engines: {node: '>=10'} 1119 | dependencies: 1120 | map-age-cleaner: 0.1.3 1121 | mimic-fn: 3.1.0 1122 | dev: true 1123 | 1124 | /merge2/1.4.1: 1125 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1126 | engines: {node: '>= 8'} 1127 | dev: true 1128 | 1129 | /micromatch/4.0.5: 1130 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1131 | engines: {node: '>=8.6'} 1132 | dependencies: 1133 | braces: 3.0.2 1134 | picomatch: 2.3.1 1135 | dev: true 1136 | 1137 | /mimic-fn/2.1.0: 1138 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1139 | engines: {node: '>=6'} 1140 | dev: true 1141 | 1142 | /mimic-fn/3.1.0: 1143 | resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} 1144 | engines: {node: '>=8'} 1145 | dev: true 1146 | 1147 | /mimic-response/1.0.1: 1148 | resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} 1149 | engines: {node: '>=4'} 1150 | dev: true 1151 | 1152 | /minimatch/3.1.2: 1153 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1154 | dependencies: 1155 | brace-expansion: 1.1.11 1156 | dev: true 1157 | 1158 | /minimist/1.2.6: 1159 | resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} 1160 | dev: true 1161 | 1162 | /ms/2.1.2: 1163 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1164 | dev: true 1165 | 1166 | /ms/2.1.3: 1167 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1168 | dev: true 1169 | 1170 | /normalize-package-data/2.5.0: 1171 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1172 | dependencies: 1173 | hosted-git-info: 2.8.9 1174 | resolve: 1.22.0 1175 | semver: 5.7.1 1176 | validate-npm-package-license: 3.0.4 1177 | dev: true 1178 | 1179 | /normalize-path/3.0.0: 1180 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1181 | engines: {node: '>=0.10.0'} 1182 | dev: true 1183 | 1184 | /normalize-url/4.5.1: 1185 | resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} 1186 | engines: {node: '>=8'} 1187 | dev: true 1188 | 1189 | /once/1.4.0: 1190 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 1191 | dependencies: 1192 | wrappy: 1.0.2 1193 | dev: true 1194 | 1195 | /onetime/5.1.2: 1196 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1197 | engines: {node: '>=6'} 1198 | dependencies: 1199 | mimic-fn: 2.1.0 1200 | dev: true 1201 | 1202 | /ora/5.4.1: 1203 | resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} 1204 | engines: {node: '>=10'} 1205 | dependencies: 1206 | bl: 4.1.0 1207 | chalk: 4.1.2 1208 | cli-cursor: 3.1.0 1209 | cli-spinners: 2.6.1 1210 | is-interactive: 1.0.0 1211 | is-unicode-supported: 0.1.0 1212 | log-symbols: 4.1.0 1213 | strip-ansi: 6.0.1 1214 | wcwidth: 1.0.1 1215 | dev: true 1216 | 1217 | /p-cancelable/1.1.0: 1218 | resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} 1219 | engines: {node: '>=6'} 1220 | dev: true 1221 | 1222 | /p-defer/1.0.0: 1223 | resolution: {integrity: sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=} 1224 | engines: {node: '>=4'} 1225 | dev: true 1226 | 1227 | /p-event/4.2.0: 1228 | resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} 1229 | engines: {node: '>=8'} 1230 | dependencies: 1231 | p-timeout: 3.2.0 1232 | dev: true 1233 | 1234 | /p-finally/1.0.0: 1235 | resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=} 1236 | engines: {node: '>=4'} 1237 | dev: true 1238 | 1239 | /p-limit/2.3.0: 1240 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1241 | engines: {node: '>=6'} 1242 | dependencies: 1243 | p-try: 2.2.0 1244 | dev: true 1245 | 1246 | /p-locate/3.0.0: 1247 | resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} 1248 | engines: {node: '>=6'} 1249 | dependencies: 1250 | p-limit: 2.3.0 1251 | dev: true 1252 | 1253 | /p-locate/4.1.0: 1254 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1255 | engines: {node: '>=8'} 1256 | dependencies: 1257 | p-limit: 2.3.0 1258 | dev: true 1259 | 1260 | /p-map/4.0.0: 1261 | resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} 1262 | engines: {node: '>=10'} 1263 | dependencies: 1264 | aggregate-error: 3.1.0 1265 | dev: true 1266 | 1267 | /p-timeout/3.2.0: 1268 | resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} 1269 | engines: {node: '>=8'} 1270 | dependencies: 1271 | p-finally: 1.0.0 1272 | dev: true 1273 | 1274 | /p-try/2.2.0: 1275 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1276 | engines: {node: '>=6'} 1277 | dev: true 1278 | 1279 | /package-json/6.5.0: 1280 | resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} 1281 | engines: {node: '>=8'} 1282 | dependencies: 1283 | got: 9.6.0 1284 | registry-auth-token: 4.2.1 1285 | registry-url: 5.1.0 1286 | semver: 6.3.0 1287 | dev: true 1288 | 1289 | /parse-json/4.0.0: 1290 | resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=} 1291 | engines: {node: '>=4'} 1292 | dependencies: 1293 | error-ex: 1.3.2 1294 | json-parse-better-errors: 1.0.2 1295 | dev: true 1296 | 1297 | /parse-json/5.2.0: 1298 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1299 | engines: {node: '>=8'} 1300 | dependencies: 1301 | '@babel/code-frame': 7.16.7 1302 | error-ex: 1.3.2 1303 | json-parse-even-better-errors: 2.3.1 1304 | lines-and-columns: 1.2.4 1305 | dev: true 1306 | 1307 | /parse-ms/2.1.0: 1308 | resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} 1309 | engines: {node: '>=6'} 1310 | dev: true 1311 | 1312 | /path-exists/3.0.0: 1313 | resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} 1314 | engines: {node: '>=4'} 1315 | dev: true 1316 | 1317 | /path-exists/4.0.0: 1318 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1319 | engines: {node: '>=8'} 1320 | dev: true 1321 | 1322 | /path-is-absolute/1.0.1: 1323 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} 1324 | engines: {node: '>=0.10.0'} 1325 | dev: true 1326 | 1327 | /path-parse/1.0.7: 1328 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1329 | dev: true 1330 | 1331 | /path-type/4.0.0: 1332 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1333 | engines: {node: '>=8'} 1334 | dev: true 1335 | 1336 | /picomatch/2.3.1: 1337 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1338 | engines: {node: '>=8.6'} 1339 | dev: true 1340 | 1341 | /pify/4.0.1: 1342 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1343 | engines: {node: '>=6'} 1344 | dev: true 1345 | 1346 | /pkg-conf/3.1.0: 1347 | resolution: {integrity: sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==} 1348 | engines: {node: '>=6'} 1349 | dependencies: 1350 | find-up: 3.0.0 1351 | load-json-file: 5.3.0 1352 | dev: true 1353 | 1354 | /pkg-dir/4.2.0: 1355 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1356 | engines: {node: '>=8'} 1357 | dependencies: 1358 | find-up: 4.1.0 1359 | dev: true 1360 | 1361 | /plur/4.0.0: 1362 | resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==} 1363 | engines: {node: '>=10'} 1364 | dependencies: 1365 | irregular-plurals: 3.3.0 1366 | dev: true 1367 | 1368 | /prepend-http/2.0.0: 1369 | resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=} 1370 | engines: {node: '>=4'} 1371 | dev: true 1372 | 1373 | /pretty-ms/7.0.1: 1374 | resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} 1375 | engines: {node: '>=10'} 1376 | dependencies: 1377 | parse-ms: 2.1.0 1378 | dev: true 1379 | 1380 | /pump/3.0.0: 1381 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} 1382 | dependencies: 1383 | end-of-stream: 1.4.4 1384 | once: 1.4.0 1385 | dev: true 1386 | 1387 | /pupa/2.1.1: 1388 | resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} 1389 | engines: {node: '>=8'} 1390 | dependencies: 1391 | escape-goat: 2.1.1 1392 | dev: true 1393 | 1394 | /queue-microtask/1.2.3: 1395 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1396 | dev: true 1397 | 1398 | /rc/1.2.8: 1399 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 1400 | hasBin: true 1401 | dependencies: 1402 | deep-extend: 0.6.0 1403 | ini: 1.3.8 1404 | minimist: 1.2.6 1405 | strip-json-comments: 2.0.1 1406 | dev: true 1407 | 1408 | /read-pkg/5.2.0: 1409 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1410 | engines: {node: '>=8'} 1411 | dependencies: 1412 | '@types/normalize-package-data': 2.4.1 1413 | normalize-package-data: 2.5.0 1414 | parse-json: 5.2.0 1415 | type-fest: 0.6.0 1416 | dev: true 1417 | 1418 | /readable-stream/3.6.0: 1419 | resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} 1420 | engines: {node: '>= 6'} 1421 | dependencies: 1422 | inherits: 2.0.4 1423 | string_decoder: 1.3.0 1424 | util-deprecate: 1.0.2 1425 | dev: true 1426 | 1427 | /readdirp/3.6.0: 1428 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1429 | engines: {node: '>=8.10.0'} 1430 | dependencies: 1431 | picomatch: 2.3.1 1432 | dev: true 1433 | 1434 | /registry-auth-token/4.2.1: 1435 | resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} 1436 | engines: {node: '>=6.0.0'} 1437 | dependencies: 1438 | rc: 1.2.8 1439 | dev: true 1440 | 1441 | /registry-url/5.1.0: 1442 | resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} 1443 | engines: {node: '>=8'} 1444 | dependencies: 1445 | rc: 1.2.8 1446 | dev: true 1447 | 1448 | /require-directory/2.1.1: 1449 | resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} 1450 | engines: {node: '>=0.10.0'} 1451 | dev: true 1452 | 1453 | /resolve-cwd/3.0.0: 1454 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 1455 | engines: {node: '>=8'} 1456 | dependencies: 1457 | resolve-from: 5.0.0 1458 | dev: true 1459 | 1460 | /resolve-from/5.0.0: 1461 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1462 | engines: {node: '>=8'} 1463 | dev: true 1464 | 1465 | /resolve/1.22.0: 1466 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 1467 | hasBin: true 1468 | dependencies: 1469 | is-core-module: 2.8.1 1470 | path-parse: 1.0.7 1471 | supports-preserve-symlinks-flag: 1.0.0 1472 | dev: true 1473 | 1474 | /responselike/1.0.2: 1475 | resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=} 1476 | dependencies: 1477 | lowercase-keys: 1.0.1 1478 | dev: true 1479 | 1480 | /restore-cursor/3.1.0: 1481 | resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} 1482 | engines: {node: '>=8'} 1483 | dependencies: 1484 | onetime: 5.1.2 1485 | signal-exit: 3.0.7 1486 | dev: true 1487 | 1488 | /reusify/1.0.4: 1489 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1490 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1491 | dev: true 1492 | 1493 | /rimraf/3.0.2: 1494 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1495 | hasBin: true 1496 | dependencies: 1497 | glob: 7.2.0 1498 | dev: true 1499 | 1500 | /run-parallel/1.2.0: 1501 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1502 | dependencies: 1503 | queue-microtask: 1.2.3 1504 | dev: true 1505 | 1506 | /safe-buffer/5.1.2: 1507 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1508 | dev: true 1509 | 1510 | /safe-buffer/5.2.1: 1511 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1512 | dev: true 1513 | 1514 | /semver-diff/3.1.1: 1515 | resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} 1516 | engines: {node: '>=8'} 1517 | dependencies: 1518 | semver: 6.3.0 1519 | dev: true 1520 | 1521 | /semver/5.7.1: 1522 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 1523 | hasBin: true 1524 | dev: true 1525 | 1526 | /semver/6.3.0: 1527 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1528 | hasBin: true 1529 | dev: true 1530 | 1531 | /semver/7.3.5: 1532 | resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} 1533 | engines: {node: '>=10'} 1534 | hasBin: true 1535 | dependencies: 1536 | lru-cache: 6.0.0 1537 | dev: true 1538 | 1539 | /serialize-error/7.0.1: 1540 | resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} 1541 | engines: {node: '>=10'} 1542 | dependencies: 1543 | type-fest: 0.13.1 1544 | dev: true 1545 | 1546 | /signal-exit/3.0.7: 1547 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1548 | dev: true 1549 | 1550 | /slash/3.0.0: 1551 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1552 | engines: {node: '>=8'} 1553 | dev: true 1554 | 1555 | /slice-ansi/3.0.0: 1556 | resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} 1557 | engines: {node: '>=8'} 1558 | dependencies: 1559 | ansi-styles: 4.3.0 1560 | astral-regex: 2.0.0 1561 | is-fullwidth-code-point: 3.0.0 1562 | dev: true 1563 | 1564 | /source-map-support/0.5.21: 1565 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1566 | dependencies: 1567 | buffer-from: 1.1.2 1568 | source-map: 0.6.1 1569 | dev: true 1570 | 1571 | /source-map/0.6.1: 1572 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1573 | engines: {node: '>=0.10.0'} 1574 | dev: true 1575 | 1576 | /spdx-correct/3.1.1: 1577 | resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} 1578 | dependencies: 1579 | spdx-expression-parse: 3.0.1 1580 | spdx-license-ids: 3.0.11 1581 | dev: true 1582 | 1583 | /spdx-exceptions/2.3.0: 1584 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 1585 | dev: true 1586 | 1587 | /spdx-expression-parse/3.0.1: 1588 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1589 | dependencies: 1590 | spdx-exceptions: 2.3.0 1591 | spdx-license-ids: 3.0.11 1592 | dev: true 1593 | 1594 | /spdx-license-ids/3.0.11: 1595 | resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} 1596 | dev: true 1597 | 1598 | /sprintf-js/1.0.3: 1599 | resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} 1600 | dev: true 1601 | 1602 | /stack-utils/2.0.5: 1603 | resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} 1604 | engines: {node: '>=10'} 1605 | dependencies: 1606 | escape-string-regexp: 2.0.0 1607 | dev: true 1608 | 1609 | /string-width/4.2.3: 1610 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1611 | engines: {node: '>=8'} 1612 | dependencies: 1613 | emoji-regex: 8.0.0 1614 | is-fullwidth-code-point: 3.0.0 1615 | strip-ansi: 6.0.1 1616 | dev: true 1617 | 1618 | /string_decoder/1.3.0: 1619 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1620 | dependencies: 1621 | safe-buffer: 5.2.1 1622 | dev: true 1623 | 1624 | /strip-ansi/6.0.1: 1625 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1626 | engines: {node: '>=8'} 1627 | dependencies: 1628 | ansi-regex: 5.0.1 1629 | dev: true 1630 | 1631 | /strip-bom/3.0.0: 1632 | resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} 1633 | engines: {node: '>=4'} 1634 | dev: true 1635 | 1636 | /strip-json-comments/2.0.1: 1637 | resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} 1638 | engines: {node: '>=0.10.0'} 1639 | dev: true 1640 | 1641 | /supertap/2.0.0: 1642 | resolution: {integrity: sha512-jRzcXlCeDYvKoZGA5oRhYyR3jUIYu0enkSxtmAgHRlD7HwrovTpH4bDSi0py9FtuA8si9cW/fKommJHuaoDHJA==} 1643 | engines: {node: '>=10'} 1644 | dependencies: 1645 | arrify: 2.0.1 1646 | indent-string: 4.0.0 1647 | js-yaml: 3.14.1 1648 | serialize-error: 7.0.1 1649 | strip-ansi: 6.0.1 1650 | dev: true 1651 | 1652 | /supports-color/5.5.0: 1653 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1654 | engines: {node: '>=4'} 1655 | dependencies: 1656 | has-flag: 3.0.0 1657 | dev: true 1658 | 1659 | /supports-color/7.2.0: 1660 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1661 | engines: {node: '>=8'} 1662 | dependencies: 1663 | has-flag: 4.0.0 1664 | dev: true 1665 | 1666 | /supports-preserve-symlinks-flag/1.0.0: 1667 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1668 | engines: {node: '>= 0.4'} 1669 | dev: true 1670 | 1671 | /temp-dir/2.0.0: 1672 | resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} 1673 | engines: {node: '>=8'} 1674 | dev: true 1675 | 1676 | /time-zone/1.0.0: 1677 | resolution: {integrity: sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=} 1678 | engines: {node: '>=4'} 1679 | dev: true 1680 | 1681 | /to-readable-stream/1.0.0: 1682 | resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} 1683 | engines: {node: '>=6'} 1684 | dev: true 1685 | 1686 | /to-regex-range/5.0.1: 1687 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1688 | engines: {node: '>=8.0'} 1689 | dependencies: 1690 | is-number: 7.0.0 1691 | dev: true 1692 | 1693 | /trim-off-newlines/1.0.3: 1694 | resolution: {integrity: sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==} 1695 | engines: {node: '>=0.10.0'} 1696 | dev: true 1697 | 1698 | /type-fest/0.13.1: 1699 | resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} 1700 | engines: {node: '>=10'} 1701 | dev: true 1702 | 1703 | /type-fest/0.20.2: 1704 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1705 | engines: {node: '>=10'} 1706 | dev: true 1707 | 1708 | /type-fest/0.3.1: 1709 | resolution: {integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==} 1710 | engines: {node: '>=6'} 1711 | dev: true 1712 | 1713 | /type-fest/0.6.0: 1714 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 1715 | engines: {node: '>=8'} 1716 | dev: true 1717 | 1718 | /typedarray-to-buffer/3.1.5: 1719 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 1720 | dependencies: 1721 | is-typedarray: 1.0.0 1722 | dev: true 1723 | 1724 | /unique-string/2.0.0: 1725 | resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} 1726 | engines: {node: '>=8'} 1727 | dependencies: 1728 | crypto-random-string: 2.0.0 1729 | dev: true 1730 | 1731 | /update-notifier/5.1.0: 1732 | resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} 1733 | engines: {node: '>=10'} 1734 | dependencies: 1735 | boxen: 5.1.2 1736 | chalk: 4.1.2 1737 | configstore: 5.0.1 1738 | has-yarn: 2.1.0 1739 | import-lazy: 2.1.0 1740 | is-ci: 2.0.0 1741 | is-installed-globally: 0.4.0 1742 | is-npm: 5.0.0 1743 | is-yarn-global: 0.3.0 1744 | latest-version: 5.1.0 1745 | pupa: 2.1.1 1746 | semver: 7.3.5 1747 | semver-diff: 3.1.1 1748 | xdg-basedir: 4.0.0 1749 | dev: true 1750 | 1751 | /url-parse-lax/3.0.0: 1752 | resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=} 1753 | engines: {node: '>=4'} 1754 | dependencies: 1755 | prepend-http: 2.0.0 1756 | dev: true 1757 | 1758 | /util-deprecate/1.0.2: 1759 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} 1760 | dev: true 1761 | 1762 | /validate-npm-package-license/3.0.4: 1763 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1764 | dependencies: 1765 | spdx-correct: 3.1.1 1766 | spdx-expression-parse: 3.0.1 1767 | dev: true 1768 | 1769 | /wcwidth/1.0.1: 1770 | resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=} 1771 | dependencies: 1772 | defaults: 1.0.3 1773 | dev: true 1774 | 1775 | /well-known-symbols/2.0.0: 1776 | resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} 1777 | engines: {node: '>=6'} 1778 | dev: true 1779 | 1780 | /widest-line/3.1.0: 1781 | resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} 1782 | engines: {node: '>=8'} 1783 | dependencies: 1784 | string-width: 4.2.3 1785 | dev: true 1786 | 1787 | /wrap-ansi/7.0.0: 1788 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1789 | engines: {node: '>=10'} 1790 | dependencies: 1791 | ansi-styles: 4.3.0 1792 | string-width: 4.2.3 1793 | strip-ansi: 6.0.1 1794 | dev: true 1795 | 1796 | /wrappy/1.0.2: 1797 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 1798 | dev: true 1799 | 1800 | /write-file-atomic/3.0.3: 1801 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} 1802 | dependencies: 1803 | imurmurhash: 0.1.4 1804 | is-typedarray: 1.0.0 1805 | signal-exit: 3.0.7 1806 | typedarray-to-buffer: 3.1.5 1807 | dev: true 1808 | 1809 | /xdg-basedir/4.0.0: 1810 | resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} 1811 | engines: {node: '>=8'} 1812 | dev: true 1813 | 1814 | /y18n/5.0.8: 1815 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1816 | engines: {node: '>=10'} 1817 | dev: true 1818 | 1819 | /yallist/4.0.0: 1820 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1821 | dev: true 1822 | 1823 | /yargs-parser/20.2.9: 1824 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 1825 | engines: {node: '>=10'} 1826 | dev: true 1827 | 1828 | /yargs/16.2.0: 1829 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 1830 | engines: {node: '>=10'} 1831 | dependencies: 1832 | cliui: 7.0.4 1833 | escalade: 3.1.1 1834 | get-caller-file: 2.0.5 1835 | require-directory: 2.1.1 1836 | string-width: 4.2.3 1837 | y18n: 5.0.8 1838 | yargs-parser: 20.2.9 1839 | dev: true 1840 | -------------------------------------------------------------------------------- /src/module.js: -------------------------------------------------------------------------------- 1 | function parser(text) { 2 | const blocks = text.split(/\n\n/g); 3 | let parsedText = ""; 4 | for (let i = 0; i < blocks.length; i++) { 5 | const el = blocks[i]; 6 | const codeRegex = new RegExp("^```\n(.+)\n```", "sgim"); 7 | const codeTest = codeRegex.test(el); 8 | 9 | if (!codeTest) { 10 | let tempText = el 11 | .replace(/^(#) (.*$)/gim, function (char, item, item2) { 12 | return parseTitles(item, item2); 13 | }) // h1 tag 14 | .replace(/^(##) (.*$)/gim, function (char, item, item2) { 15 | return parseTitles(item, item2); 16 | }) // h2 tag 17 | .replace(/^(###) (.*$)/gim, function (char, item, item2) { 18 | return parseTitles(item, item2); 19 | }) // h3 tag 20 | .replace(/^(####) (.*$)/gim, function (char, item, item2) { 21 | return parseTitles(item, item2); 22 | }) // h4 tag 23 | .replace(/^(#####) (.*$)/gim, function (char, item, item2) { 24 | return parseTitles(item, item2); 25 | }) // h5 tag 26 | .replace(/^(######) (.*$)/gim, function (char, item, item2) { 27 | return parseTitles(item, item2); 28 | }) // h6 tag 29 | .replace(/\`(.*?)\`/gim, function (char, item) { 30 | if (item.includes("<")) { 31 | return `${item.replace(/<")}`; 32 | } else { 33 | return `${item}`; 34 | } 35 | }) // strong text 36 | .replace(/^----$/gim, "
        ") // hr tag 37 | .replace( 38 | /(^|\(|\s)_(.*?)_(\s|\.|\,|\?|\!|\n|\)|\b)/gim, 39 | "$1$2$3" 40 | ) // em text 41 | .replace(/\*(.*?)\*/gim, "$1") // strong text 42 | .replace(/\~(.*?)\~/gim, "$1") // strike text 43 | .replace(/^- (.*$)/gim, "
        • $1
        \n\n") // strike text 44 | .replace(/^\+ (.*$)/gim, "
        1. $1
        \n\n") // strike text 45 | .replace(/^\? (.*) : (.*$)/gim, "
        $1
        $2
        \n\n") // strike text 46 | .replace(/\(link:(.*?)\)/gim, function (char, item) { 47 | return parseLinks(item); 48 | }) // links 49 | .replace(/\(image:(.*?)\)/gim, function (char, item) { 50 | return parseImage(item); 51 | }) // image 52 | .replace(/\(video:(.*?)\)/gim, function (char, item) { 53 | return parseVideo(item); 54 | }) // links 55 | .replace(/\(audio:(.*?)\)/gim, function (char, item) { 56 | const mp3 = item.trim(); 57 | return ``; 58 | }) // links 59 | .replace(/\(quote:(.*)\)/gim, function (char, item) { 60 | return parseQuote(item); 61 | }); // blockquote 62 | 63 | const htmlRegex = new RegExp("^<(.*)>", "gim"); 64 | const htmlTest = htmlRegex.test(tempText); 65 | 66 | if (!htmlTest) { 67 | tempText = `

        ${tempText.trim()}

        \n\n`; 68 | } 69 | 70 | if (tempText) { 71 | parsedText += tempText; 72 | } 73 | } else if (codeTest) { 74 | const splitCode = el.trim().split("\n"); 75 | splitCode.shift(); 76 | splitCode.pop(); 77 | const cleanedCode = []; 78 | splitCode.forEach((el) => { 79 | if (el.includes("<")) { 80 | cleanedCode.push(el.replace(/<")); 81 | } else { 82 | cleanedCode.push(el); 83 | } 84 | }); 85 | const tempText = `
        ${cleanedCode.join(
         86 |         "\n"
         87 |       )}\n
        \n\n`; 88 | if (tempText) { 89 | parsedText += tempText; 90 | } 91 | } 92 | } 93 | 94 | const cleanedText = parsedText 95 | .replace(/<\/ul>\n\n\n
          /g, "") 96 | .replace(/<\/ol>\n\n\n
            /g, "") 97 | .replace(/<\/dl>\n\n\n
            /g, "") 98 | .replace(/

            [\s\S\n]<\/p>/gim, "") 99 | .replace(/

            <\/p>/g, "") 100 | .replace(/<\/li>

          1. /g, "
          2. \n
          3. ") 101 | .replace(/<\/em>/g, "__") 102 | .replace(/<\/strong>/g, "**") 103 | .replace(/<\/del>/g, "~~"); 104 | 105 | return cleanedText; 106 | } 107 | 108 | function parseTitles(character, titleContent) { 109 | const lvl = character.length; 110 | const titleId = toKebab(titleContent).trim(); 111 | const html = `${titleContent.trim()}\n\n`; 112 | return html; 113 | } 114 | 115 | function parseLinks(linkContent) { 116 | const linkData = /^(.+?(?=text:|title:|label:|$))/.exec(linkContent); 117 | const textData = /text:(.+?(?=title:|label:|$))/.exec(linkContent); 118 | const titleData = /title:(.+?(?=text:|label:|$))/.exec(linkContent); 119 | const labelData = /label:(.+?(?=text:|title:|$))/.exec(linkContent); 120 | const link = linkData ? `href="${linkData[1].trim()}"` : ""; 121 | const text = textData ? textData[1].trim() : linkData[1].trim(); 122 | const title = titleData ? ` title="${titleData[1].trim()}"` : ""; 123 | const label = labelData ? ` aria-label="${labelData[1].trim()}"` : ""; 124 | const html = `${text}`; 125 | return html; 126 | } 127 | 128 | function parseImage(imgContent) { 129 | const linkData = 130 | /^.+?(?=figcaption|(.jpg)|(.jpeg)|(.png)|alt:|figcaption|$)/.exec( 131 | imgContent 132 | ); 133 | const altData = /alt:(.+?(?=figcaption|$))/.exec(imgContent); 134 | const figcaptionData = /figcaption:(.+?(?=alt|$))/.exec(imgContent); 135 | const link = linkData ? linkData[0].trim() : ""; 136 | const extension = 137 | linkData[1] || linkData[2] || linkData[3] 138 | ? linkData[1] || linkData[2] || linkData[3] 139 | : ""; 140 | const alt = altData ? `alt="${altData[1].trim()}"` : ""; 141 | const figcaption = figcaptionData 142 | ? `
            ${figcaptionData[1].trim()}
            ` 143 | : ""; 144 | 145 | // Uncomment this for picture + srcset 146 | const html = `${ 147 | figcaption ? "
            " : "" 148 | }${figcaption} ${ 151 | figcaption ? "
            " : "" 152 | }`; 153 | return html; 154 | 155 | // if (figcaption) { 156 | // const html = `
            ${figcaption}
            ` 157 | // return html 158 | // } else { 159 | // const html = `` 160 | // return html 161 | // } 162 | } 163 | 164 | function parseVideo(videoContent) { 165 | const videoData = /^(.+?(?=autoplay|figcaption|$))/.exec(videoContent); 166 | const autoplayData = / autoplay/.exec(videoContent); 167 | const figcaptionData = /figcaption:(.+?(?=autoplay|$))/.exec(videoContent); 168 | const link = videoData ? `src="${videoData[1].trim()}"` : ""; 169 | const controls = autoplayData 170 | ? "autoplay playsinline loop mute" 171 | : "controls playsinline"; 172 | const format = /\.mp4|\.webm|\.mov/.exec(link); 173 | const source = `type="video/${format.toString().slice(1)}"`; 174 | const figcaption = figcaptionData 175 | ? `
            ${figcaptionData[1].trim()}
            ` 176 | : ""; 177 | const html = `${ 178 | figcaptionData ? "
            " : "" 179 | }${figcaption}${ 180 | figcaptionData ? "
            " : "" 181 | }`; 182 | return html; 183 | } 184 | 185 | function parseQuote(quoteContent) { 186 | const quoteData = /^(.+?(?=author|source|link|$))/.exec(quoteContent); 187 | const authorData = /author:(.+?(?=source|link|$))/.exec(quoteContent); 188 | const sourceData = /source:(.+?(?=author|link|$))/.exec(quoteContent); 189 | const linkData = /link:(.+?(?=author|source|$))/.exec(quoteContent); 190 | const quote = quoteData ? quoteData[1].trim() : false; 191 | const author = authorData ? authorData[1].trim() : false; 192 | const source = sourceData ? sourceData[1].trim() : false; 193 | const link = linkData ? linkData[1].trim() : false; 194 | const cite = link ? `cite="${link}"` : ""; 195 | 196 | let figcaption = ""; 197 | if (author && !source && !link) { 198 | figcaption = `
            — ${author}
            `; 199 | } else if (author && source && !link) { 200 | figcaption = `
            — ${author}, ${source}
            `; 201 | } else if (author && source && link) { 202 | figcaption = `
            — ${author}, ${source}
            `; 203 | } else if (!author && source && link) { 204 | figcaption = `
            ${source}
            `; 205 | } else if (!author && !source && link) { 206 | figcaption = `
            ${link}
            `; 207 | } else if (!author && source && !link) { 208 | figcaption = `
            ${source}
            `; 209 | } 210 | 211 | const html = `
            ${quote}
            ${figcaption}
            `; 212 | return html; 213 | } 214 | 215 | function toKebab(text) { 216 | const toKebabCase = 217 | text && 218 | text 219 | .match( 220 | /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g 221 | ) 222 | .map((x) => x.toLowerCase()) 223 | .join("-"); 224 | return toKebabCase; 225 | } 226 | export { parser as default }; 227 | -------------------------------------------------------------------------------- /src/parser.js: -------------------------------------------------------------------------------- 1 | function parser(text) { 2 | const blocks = text.split(/\n\n/g); 3 | let parsedText = ""; 4 | for (let i = 0; i < blocks.length; i++) { 5 | const el = blocks[i]; 6 | const codeRegex = new RegExp("^```\n(.+)\n```", "sgim"); 7 | const codeTest = codeRegex.test(el); 8 | 9 | if (!codeTest) { 10 | let tempText = el 11 | .replace(/^(#) (.*$)/gim, function (char, item, item2) { 12 | return parseTitles(item, item2); 13 | }) // h1 tag 14 | .replace(/^(##) (.*$)/gim, function (char, item, item2) { 15 | return parseTitles(item, item2); 16 | }) // h2 tag 17 | .replace(/^(###) (.*$)/gim, function (char, item, item2) { 18 | return parseTitles(item, item2); 19 | }) // h3 tag 20 | .replace(/^(####) (.*$)/gim, function (char, item, item2) { 21 | return parseTitles(item, item2); 22 | }) // h4 tag 23 | .replace(/^(#####) (.*$)/gim, function (char, item, item2) { 24 | return parseTitles(item, item2); 25 | }) // h5 tag 26 | .replace(/^(######) (.*$)/gim, function (char, item, item2) { 27 | return parseTitles(item, item2); 28 | }) // h6 tag 29 | .replace(/\`(.*?)\`/gim, function (char, item) { 30 | if (item.includes("<")) { 31 | return `${item.replace(/<")}`; 32 | } else { 33 | return `${item}`; 34 | } 35 | }) // strong text 36 | .replace(/^----$/gim, "
            ") // hr tag 37 | .replace( 38 | /(^|\(|\s)_(.*?)_(\s|\.|\,|\?|\!|\n|\)|\b)/gim, 39 | "$1$2$3" 40 | ) // em text 41 | .replace(/\*(.*?)\*/gim, "$1") // strong text 42 | .replace(/\~(.*?)\~/gim, "$1") // strike text 43 | .replace(/^- (.*$)/gim, "
            • $1
            \n\n") // strike text 44 | .replace(/^\+ (.*$)/gim, "
            1. $1
            \n\n") // strike text 45 | .replace(/^\? (.*) : (.*$)/gim, "
            $1
            $2
            \n\n") // strike text 46 | .replace(/\(link:(.*?)\)/gim, function (char, item) { 47 | return parseLinks(item); 48 | }) // links 49 | .replace(/\(image:(.*?)\)/gim, function (char, item) { 50 | return parseImage(item); 51 | }) // image 52 | .replace(/\(video:(.*?)\)/gim, function (char, item) { 53 | return parseVideo(item); 54 | }) // links 55 | .replace(/\(audio:(.*?)\)/gim, function (char, item) { 56 | const mp3 = item.trim(); 57 | return ``; 58 | }) // links 59 | .replace(/\(quote:(.*)\)/gim, function (char, item) { 60 | return parseQuote(item); 61 | }); // blockquote 62 | 63 | const htmlRegex = new RegExp("^<(.*)>", "gim"); 64 | const htmlTest = htmlRegex.test(tempText); 65 | 66 | if (!htmlTest) { 67 | tempText = `

            ${tempText.trim()}

            \n\n`; 68 | } 69 | 70 | if (tempText) { 71 | parsedText += tempText; 72 | } 73 | } else if (codeTest) { 74 | const splitCode = el.trim().split("\n"); 75 | splitCode.shift(); 76 | splitCode.pop(); 77 | const cleanedCode = []; 78 | splitCode.forEach((el) => { 79 | if (el.includes("<")) { 80 | cleanedCode.push(el.replace(/<")); 81 | } else { 82 | cleanedCode.push(el); 83 | } 84 | }); 85 | const tempText = `
            ${cleanedCode.join(
             86 |         "\n"
             87 |       )}\n
            \n\n`; 88 | if (tempText) { 89 | parsedText += tempText; 90 | } 91 | } 92 | } 93 | 94 | const cleanedText = parsedText 95 | .replace(/<\/ul>\n\n\n
              /g, "") 96 | .replace(/<\/ol>\n\n\n
                /g, "") 97 | .replace(/<\/dl>\n\n\n
                /g, "") 98 | .replace(/

                [\s\S\n]<\/p>/gim, "") 99 | .replace(/

                <\/p>/g, "") 100 | .replace(/<\/li>

              1. /g, "
              2. \n
              3. ") 101 | .replace(/<\/em>/g, "__") 102 | .replace(/<\/strong>/g, "**") 103 | .replace(/<\/del>/g, "~~"); 104 | 105 | return cleanedText; 106 | } 107 | 108 | function parseTitles(character, titleContent) { 109 | const lvl = character.length; 110 | const titleId = toKebab(titleContent).trim(); 111 | const html = `${titleContent.trim()}\n\n`; 112 | return html; 113 | } 114 | 115 | function parseLinks(linkContent) { 116 | const linkData = /^(.+?(?=text:|title:|label:|$))/.exec(linkContent); 117 | const textData = /text:(.+?(?=title:|label:|$))/.exec(linkContent); 118 | const titleData = /title:(.+?(?=text:|label:|$))/.exec(linkContent); 119 | const labelData = /label:(.+?(?=text:|title:|$))/.exec(linkContent); 120 | const link = linkData ? `href="${linkData[1].trim()}"` : ""; 121 | const text = textData ? textData[1].trim() : linkData[1].trim(); 122 | const title = titleData ? ` title="${titleData[1].trim()}"` : ""; 123 | const label = labelData ? ` aria-label="${labelData[1].trim()}"` : ""; 124 | const html = `${text}`; 125 | return html; 126 | } 127 | 128 | function parseImage(imgContent) { 129 | const linkData = 130 | /^.+?(?=figcaption|(.jpg)|(.jpeg)|(.png)|alt:|figcaption|$)/.exec( 131 | imgContent 132 | ); 133 | const altData = /alt:(.+?(?=figcaption|$))/.exec(imgContent); 134 | const figcaptionData = /figcaption:(.+?(?=alt|$))/.exec(imgContent); 135 | const link = linkData ? linkData[0].trim() : ""; 136 | const extension = 137 | linkData[1] || linkData[2] || linkData[3] 138 | ? linkData[1] || linkData[2] || linkData[3] 139 | : ""; 140 | const alt = altData ? `alt="${altData[1].trim()}"` : ""; 141 | const figcaption = figcaptionData 142 | ? `
                ${figcaptionData[1].trim()}
                ` 143 | : ""; 144 | 145 | // Uncomment this for picture + srcset 146 | const html = `${ 147 | figcaption ? "
                " : "" 148 | }${figcaption} ${ 151 | figcaption ? "
                " : "" 152 | }`; 153 | return html; 154 | 155 | // if (figcaption) { 156 | // const html = `
                ${figcaption}
                ` 157 | // return html 158 | // } else { 159 | // const html = `` 160 | // return html 161 | // } 162 | } 163 | 164 | function parseVideo(videoContent) { 165 | const videoData = /^(.+?(?=autoplay|figcaption|$))/.exec(videoContent); 166 | const autoplayData = / autoplay/.exec(videoContent); 167 | const figcaptionData = /figcaption:(.+?(?=autoplay|$))/.exec(videoContent); 168 | const link = videoData ? `src="${videoData[1].trim()}"` : ""; 169 | const controls = autoplayData 170 | ? "autoplay playsinline loop mute" 171 | : "controls playsinline"; 172 | const format = /\.mp4|\.webm|\.mov/.exec(link); 173 | const source = `type="video/${format.toString().slice(1)}"`; 174 | const figcaption = figcaptionData 175 | ? `
                ${figcaptionData[1].trim()}
                ` 176 | : ""; 177 | const html = `${ 178 | figcaptionData ? "
                " : "" 179 | }${figcaption}${ 180 | figcaptionData ? "
                " : "" 181 | }`; 182 | return html; 183 | } 184 | 185 | function parseQuote(quoteContent) { 186 | const quoteData = /^(.+?(?=author|source|link|$))/.exec(quoteContent); 187 | const authorData = /author:(.+?(?=source|link|$))/.exec(quoteContent); 188 | const sourceData = /source:(.+?(?=author|link|$))/.exec(quoteContent); 189 | const linkData = /link:(.+?(?=author|source|$))/.exec(quoteContent); 190 | const quote = quoteData ? quoteData[1].trim() : false; 191 | const author = authorData ? authorData[1].trim() : false; 192 | const source = sourceData ? sourceData[1].trim() : false; 193 | const link = linkData ? linkData[1].trim() : false; 194 | const cite = link ? `cite="${link}"` : ""; 195 | 196 | let figcaption = ""; 197 | if (author && !source && !link) { 198 | figcaption = `
                — ${author}
                `; 199 | } else if (author && source && !link) { 200 | figcaption = `
                — ${author}, ${source}
                `; 201 | } else if (author && source && link) { 202 | figcaption = `
                — ${author}, ${source}
                `; 203 | } else if (!author && source && link) { 204 | figcaption = `
                ${source}
                `; 205 | } else if (!author && !source && link) { 206 | figcaption = `
                ${link}
                `; 207 | } else if (!author && source && !link) { 208 | figcaption = `
                ${source}
                `; 209 | } 210 | 211 | const html = `
                ${quote}
                ${figcaption}
                `; 212 | return html; 213 | } 214 | 215 | function toKebab(text) { 216 | const toKebabCase = 217 | text && 218 | text 219 | .match( 220 | /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g 221 | ) 222 | .map((x) => x.toLowerCase()) 223 | .join("-"); 224 | return toKebabCase; 225 | } 226 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | const test = require('ava'); 2 | import parser from "./src/module" 3 | 4 | // TITLES 5 | 6 | test("Title 1", t => { 7 | const result = parser("# Title 1"); 8 | t.is(result, `

                Title 1

                \n\n`); 9 | }); 10 | 11 | test("Title 2", t => { 12 | const result = parser("## Title 2"); 13 | t.is(result, `

                Title 2

                \n\n`); 14 | }); 15 | 16 | // BLOCKQUOTE 17 | 18 | test("blockquote simple", t => { 19 | const result = parser(`(quote: Kaku is mostly used for my static website build.)`); 20 | t.is(result, `
                Kaku is mostly used for my static website build.
                `); 21 | }); 22 | 23 | test("blockquote with author", t => { 24 | const result = parser(`(quote: Kaku is mostly used for my static website build. author: Thomasorus)`); 25 | t.is(result, `
                Kaku is mostly used for my static website build.
                — Thomasorus
                `); 26 | }); 27 | 28 | test("blockquote complete", t => { 29 | const result = parser(`(quote: Kaku is mostly used for my static website build. author: Thomasorus source: Kaku's Repo link: https://github.com/Thomasorus/Kaku)`); 30 | t.is(result, `
                Kaku is mostly used for my static website build.
                — Thomasorus, Kaku's Repo
                `); 31 | }); 32 | 33 | 34 | // TYPOGRAPHY 35 | 36 | test('Bold', t => { 37 | const result = parser("Sometimes with *bold* inside."); 38 | t.is(result, "

                Sometimes with bold inside.

                \n\n"); 39 | }); 40 | 41 | test('code', t => { 42 | const result = parser("I do some \`code\` text."); 43 | t.is(result, "

                I do some code text.

                \n\n"); 44 | }); 45 | 46 | test('strike', t => { 47 | const result = parser("I do some \~code\~ text."); 48 | t.is(result, "

                I do some code text.

                \n\n"); 49 | }); 50 | 51 | 52 | test('italic', t => { 53 | const result = parser("Sometimes with _italic_ text?"); 54 | t.is(result, "

                Sometimes with italic text?

                \n\n"); 55 | }); 56 | 57 | 58 | // PARAGRAPHS 59 | 60 | test('simple text', t => { 61 | const result = parser(`simple text`); 62 | t.is(result, "

                simple text

                \n\n"); 63 | }); 64 | 65 | test('paragraph', t => { 66 | const result = parser(`I am a line\n\nI'm a second line`); 67 | t.is(result, "

                I am a line

                \n\n

                I'm a second line

                \n\n"); 68 | }); 69 | 70 | // CODE BLOCK 71 | 72 | test('code block', t => { 73 | const result = parser("```\nThis is some code\n```"); 74 | t.is(result, "
                This is some code\n
                \n\n"); 75 | }); 76 | 77 | test('code block with html', t => { 78 | const result = parser("```\nThis is some small text\n```"); 79 | t.is(result, "
                <small>This is some small text</small>\n
                \n\n"); 80 | }); 81 | 82 | 83 | // LINKS 84 | 85 | test('Link without A11Y label', t => { 86 | const result = parser('(link: link_url text: textlink)'); 87 | t.is(result, `textlink`); 88 | }); 89 | 90 | test('Link with A11Y label', t => { 91 | const result = parser('(link: link_url text: textlink label: a11ylabel title: titleText)'); 92 | t.is(result, `textlink`); 93 | }); 94 | 95 | // // // IMAGES 96 | 97 | test('Image basic', t => { 98 | const result = parser("(image: imgname)"); 99 | t.is(result, ``); 100 | }); 101 | 102 | test('Image with alt', t => { 103 | const result = parser("(image: imgname alt: altText)"); 104 | t.is(result, `altText`); 105 | }); 106 | 107 | test('Image with alt and caption', t => { 108 | const result = parser('(image: imgname alt: altText figcaption: figcaptionText)'); 109 | t.is(result, `
                altText
                figcaptionText
                `); 110 | }); 111 | 112 | // LISTS 113 | 114 | test('Bullet list', t => { 115 | const result = parser("- AAA\n- BBB\n- CCC"); 116 | t.is(result, "
                • AAA
                • \n
                • BBB
                • \n
                • CCC
                \n\n"); 117 | }); 118 | 119 | test('Ordered list', t => { 120 | const result = parser(`+ Number 1\n+ Number 2\n+ Number 3`); 121 | t.is(result, `
                1. Number 1
                2. \n
                3. Number 2
                4. \n
                5. Number 3
                \n\n`); 122 | }); 123 | 124 | test('Descriptive list', t => { 125 | const result = parser(`? Term 1 : definition 1\n? Term 2 : definition 2`); 126 | t.is(result, `
                Term 1
                definition 1
                Term 2
                definition 2
                \n\n`); 127 | }); 128 | 129 | // VIDEO 130 | 131 | test('Video', t => { 132 | const result = parser(`(video: videoUrl.mp4)`); 133 | t.is(result, ``); 134 | }); 135 | 136 | test('Video gif', t => { 137 | const result = parser(`(video: videoUrl.mp4 autoplay)`); 138 | t.is(result, ``); 139 | }); 140 | 141 | // AUDIO 142 | 143 | test('Audio', t => { 144 | const result = parser(`(audio: AudioUrl.mp3)`); 145 | t.is(result, ``); 146 | }); --------------------------------------------------------------------------------