├── .gitattributes ├── test └── data │ ├── input │ ├── L1 │ │ ├── L2 │ │ │ └── test2.yml │ │ └── test.yml │ ├── README.md │ ├── frontmatter.md │ ├── frontmatter2.md │ ├── frontmatter-code.md │ └── big-markdown.md │ ├── outputSummaryArray.json │ ├── outputSummary.json │ ├── back.json │ └── output.json ├── .github └── FUNDING.yml ├── .gitignore ├── .travis.yml ├── spec └── support │ └── jasmine.json ├── utils └── markdown-it-highlight.js ├── cli.js ├── LICENSE ├── defaultOptions.js ├── package.json ├── README.md ├── index.test.js ├── index.js └── yarn.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | -------------------------------------------------------------------------------- /test/data/input/L1/L2/test2.yml: -------------------------------------------------------------------------------- 1 | name: yaml2 2 | deep: true 3 | count: 10000 4 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: tscanlin 4 | 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | test/data/output/* 3 | test/data/back/* 4 | *.log 5 | *.log* 6 | cli.old.js 7 | -------------------------------------------------------------------------------- /test/data/input/L1/test.yml: -------------------------------------------------------------------------------- 1 | type: yaml 2 | draft: false 3 | num: 10 4 | object: 5 | prop1: true 6 | foo: bar 7 | list: 8 | - hi 9 | - bye 10 | - 1 11 | -------------------------------------------------------------------------------- /test/data/input/README.md: -------------------------------------------------------------------------------- 1 | # processmd 2 | 3 | Process a directory of markdown and yaml files to JSON files 4 | 5 | Linkify check: https://www.github.com/tscanlin/processmd 6 | -------------------------------------------------------------------------------- /test/data/input/frontmatter.md: -------------------------------------------------------------------------------- 1 | --- 2 | test: frontmatter 3 | draft: true 4 | num: 1 5 | --- 6 | 7 | # processmd 8 | 9 | Process a directory of markdown *and* yaml files to JSON files 10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "10" 4 | sudo: false 5 | branches: 6 | only: 7 | - master 8 | install: 9 | - npm install 10 | script: 11 | - npm run build 12 | - npm run test 13 | -------------------------------------------------------------------------------- /spec/support/jasmine.json: -------------------------------------------------------------------------------- 1 | { 2 | "spec_dir": ".", 3 | "spec_files": [ 4 | "*.test.js" 5 | ], 6 | "helpers": [ 7 | "helpers/**/*.js" 8 | ], 9 | "stopSpecOnExpectationFailure": false, 10 | "random": false 11 | } 12 | -------------------------------------------------------------------------------- /test/data/input/frontmatter2.md: -------------------------------------------------------------------------------- 1 | --- 2 | test: frontmatter 3 | draft: true 4 | num: 1 5 | --- 6 | 7 | Some text that might be a title 8 | 9 | Process [a](#) directory of markdown *and* yaml files to JSON files 10 | 11 | ## H2 heading 12 | -------------------------------------------------------------------------------- /test/data/input/frontmatter-code.md: -------------------------------------------------------------------------------- 1 | --- 2 | test: frontmatter 3 | draft: true 4 | num: 1 5 | --- 6 | 7 | Some text that might be a title 8 | 9 | Process a directory of markdown *and* yaml files to JSON files 10 | 11 | ```js 12 | function doStuff() { 13 | var a = 1 + 2 14 | console.log(a) 15 | } 16 | ``` 17 | -------------------------------------------------------------------------------- /utils/markdown-it-highlight.js: -------------------------------------------------------------------------------- 1 | const hljs = require('highlight.js') 2 | 3 | module.exports = function highlightPlugin (md) { 4 | const temp = md.renderer.rules.fence.bind(md.renderer.rules) 5 | md.renderer.rules.fence = (tokens, idx, options, env, slf) => { 6 | const token = tokens[idx] 7 | const code = token.content.trim() 8 | if (token.info.length > 0) { 9 | return `
${hljs.highlightAuto(code, [token.info]).value}
` 10 | } 11 | return temp(tokens, idx, options, env, slf) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /cli.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const processmd = require('./index.js').default 4 | const defaultOptions = require('./defaultOptions.js') 5 | // prettier-ignore 6 | const argv = require('yargs') 7 | .usage('Usage: $0 [options]').argv 8 | 9 | if (process.argv && process.argv.length > 2) { 10 | const options = Object.assign({}, defaultOptions, argv) 11 | try { 12 | options.markdownOptions = JSON.parse(options.markdownOptions) 13 | } catch (err) { 14 | // noop: markdownOptions was not valid JSON, leave it as a string 15 | } 16 | 17 | processmd(options, (err, data) => { 18 | if (err) { 19 | process.stderr.write(JSON.stringify(err)) 20 | } 21 | if (options.stdout) { 22 | // Indent JSON 2 spaces. 23 | process.stdout.write(JSON.stringify(data, null, 2)) 24 | } 25 | }) 26 | } else { 27 | throw new Error('You need to pass arguments to processmd') 28 | } 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Tim Scanlin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /test/data/outputSummaryArray.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "test": "frontmatter", 4 | "draft": true, 5 | "num": 1, 6 | "preview": "Some text that might be a title\n\nProcess", 7 | "title": "Some text that might be a title", 8 | "dir": "test/data/output", 9 | "base": "frontmatter-code.json", 10 | "ext": ".json", 11 | "sourceBase": "frontmatter-code.md", 12 | "sourceExt": ".md" 13 | }, 14 | { 15 | "preview": "An h1 header\n\nParagraphs are separated", 16 | "title": "An h1 header", 17 | "dir": "test/data/output", 18 | "base": "big-markdown.json", 19 | "ext": ".json", 20 | "sourceBase": "big-markdown.md", 21 | "sourceExt": ".md" 22 | }, 23 | { 24 | "type": "yaml", 25 | "draft": false, 26 | "num": 10, 27 | "object": { 28 | "prop1": true, 29 | "foo": "bar" 30 | }, 31 | "list": [ 32 | "hi", 33 | "bye", 34 | 1 35 | ], 36 | "dir": "test/data/output/L1", 37 | "base": "test.json", 38 | "ext": ".json", 39 | "sourceBase": "test.yml", 40 | "sourceExt": ".yml" 41 | }, 42 | { 43 | "test": "frontmatter", 44 | "draft": true, 45 | "num": 1, 46 | "preview": "processmd\n\nProcess a directory of", 47 | "title": "processmd", 48 | "dir": "test/data/output", 49 | "base": "frontmatter.json", 50 | "ext": ".json", 51 | "sourceBase": "frontmatter.md", 52 | "sourceExt": ".md" 53 | }, 54 | { 55 | "test": "frontmatter", 56 | "draft": true, 57 | "num": 1, 58 | "preview": "Some text that might be a title\n\nProcess", 59 | "title": "Some text that might be a title", 60 | "dir": "test/data/output", 61 | "base": "frontmatter2.json", 62 | "ext": ".json", 63 | "sourceBase": "frontmatter2.md", 64 | "sourceExt": ".md" 65 | }, 66 | { 67 | "name": "yaml2", 68 | "deep": true, 69 | "count": 10000, 70 | "dir": "test/data/output/L1/L2", 71 | "base": "test2.json", 72 | "ext": ".json", 73 | "sourceBase": "test2.yml", 74 | "sourceExt": ".yml" 75 | }, 76 | { 77 | "preview": "processmd\n\nProcess a directory of", 78 | "title": "processmd", 79 | "dir": "test/data/output", 80 | "base": "README.json", 81 | "ext": ".json", 82 | "sourceBase": "README.md", 83 | "sourceExt": ".md" 84 | } 85 | ] -------------------------------------------------------------------------------- /defaultOptions.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | // The directory output will be processed to. 3 | outputDir: './dist', 4 | // Output location for the summary file (relative path to json file that has content from all files). 5 | summaryOutput: null, 6 | // Format of the summary output that's generated ('object' or 'array'). 7 | summaryOutputFormat: 'object', 8 | // Watch mode, recompile on file changes. 9 | watch: false, 10 | // Debounce timeout for watching files. 11 | watchDebounce: 1000, 12 | // Prefix for output filenames, default is no prefix, just the original filename. 13 | filenamePrefix: '', 14 | // For markdown files, rendering mathematical equations. 15 | renderLatex: true, 16 | // For markdown files, highlight code block. 17 | highlightCode: true, 18 | // For markdown files, how many characters should be included in an add `preview` property. 0 for no preview. 19 | preview: 0, 20 | // Option to override the preview delimeter to handle internationalization and add greater flexibility (default: ' '). 21 | previewDelimiter: ' ', 22 | // Include body props in summary file. 23 | includeBodyProps: false, 24 | // Include the markdown document title as `title` on the resulting json objects. 25 | includeTitle: true, 26 | // Include the directory as `dir` on the resulting json objects. 27 | includeDir: true, 28 | // Include the filename (.json) as `base` on the resulting json objects. 29 | includeBase: true, 30 | // Include the extension (.json) as `ext` on the resulting json objects. 31 | includeExt: true, 32 | // Include the source filename (.md / .yml) as `sourceBase` on the resulting json objects. 33 | includeSourceBase: true, 34 | // Include the source extension (.md / .yml) as `sourceExt` on the resulting json objects. 35 | includeSourceExt: true, 36 | // Convert mode. Possible options for this are 'json' or 'source'. 37 | convertMode: 'json', 38 | // Whether to output to stdout or not. 39 | stdout: false, 40 | // Custom markdown renderer function, null to use the default: `markdown-it`. 41 | markdownRenderer: null, 42 | // Options to pass to the default markdown processor, markdown-it. 43 | // See here for options: https://github.com/markdown-it/markdown-it#init-with-presets-and-options 44 | markdownOptions: {}, 45 | // Include generated ids on headings. 46 | headingIds: false 47 | } 48 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "processmd", 3 | "version": "4.7.0", 4 | "description": "Process a directory of markdown and yaml files to JSON files", 5 | "main": "index.js", 6 | "bin": { 7 | "processmd": "./cli.js" 8 | }, 9 | "scripts": { 10 | "prettier": "prettier --write --single-quote --trailing-comma --no-semi *.js", 11 | "start": "npm run build:json", 12 | "build:json": "node cli.js \"test/data/input/**/*.{yml,md}\" --stdout --includeBodyProps --summaryOutput test/data/output.json --outputDir test/data/output", 13 | "build:summary": "node cli.js \"test/data/input/**/*.{yml,md}\" --stdout --preview 40 --summaryOutput test/data/outputSummary.json --outputDir test/data/output", 14 | "build:summary:array": "node cli.js \"test/data/input/**/*.{yml,md}\" --stdout --preview 40 --summaryOutput test/data/outputSummaryArray.json --summaryOutputFormat array --outputDir test/data/output", 15 | "build:yaml": "node cli.js \"test/data/output/**/*.json\" --stdout --includeBodyProps --summaryOutput test/data/back.json --convertMode source --outputDir test/data/input", 16 | "build:all": "npm run build:json && npm run build:summary && npm run build:yaml", 17 | "build": "npm run fix-line-endings", 18 | "fix-line-endings": "mv cli.js cli.old.js && cat cli.old.js | tr -d '\r' > cli.js", 19 | "fix-eol": "tr -d '\\015' test/data/input/frontmatter-code2.md", 20 | "lint": "standard", 21 | "test": "jasmine", 22 | "pretest": "npm run lint", 23 | "preversion": "npm run lint && npm run test && npm run build", 24 | "v-patch": "npm version patch && git push --tags && npm publish && git push", 25 | "v-minor": "npm version minor && git push --tags && npm publish && git push", 26 | "v-major": "npm version major && git push --tags && npm publish && git push" 27 | }, 28 | "keywords": [ 29 | "process", 30 | "markdown", 31 | "yaml", 32 | "json" 33 | ], 34 | "author": "Tim Scanlin", 35 | "license": "MIT", 36 | "dependencies": { 37 | "globby": "^10.0.1", 38 | "highlight.js": "^10.4.1", 39 | "js-yaml": "^3.13.1", 40 | "markdown-it": "^12.3.2", 41 | "markdown-it-latex": "^0.2.0", 42 | "markdown-it-named-headings": "^1.1.0", 43 | "mkdirp": "^0.5.1", 44 | "remove-markdown": "^0.3.0", 45 | "yargs": "^14.2.0" 46 | }, 47 | "devDependencies": { 48 | "jasmine": "^3.5.0", 49 | "prettier": "^1.18.2", 50 | "standard": "^14.3.1" 51 | }, 52 | "standard": { 53 | "globals": [ 54 | "describe", 55 | "expect", 56 | "it" 57 | ] 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /test/data/outputSummary.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileMap": { 3 | "test/data/output/big-markdown.json": { 4 | "preview": "An h1 header\n\nParagraphs are separated", 5 | "title": "An h1 header", 6 | "dir": "test/data/output", 7 | "base": "big-markdown.json", 8 | "ext": ".json", 9 | "sourceBase": "big-markdown.md", 10 | "sourceExt": ".md" 11 | }, 12 | "test/data/output/frontmatter-code.json": { 13 | "test": "frontmatter", 14 | "draft": true, 15 | "num": 1, 16 | "preview": "Some text that might be a title\n\nProcess", 17 | "title": "Some text that might be a title", 18 | "dir": "test/data/output", 19 | "base": "frontmatter-code.json", 20 | "ext": ".json", 21 | "sourceBase": "frontmatter-code.md", 22 | "sourceExt": ".md" 23 | }, 24 | "test/data/output/frontmatter.json": { 25 | "test": "frontmatter", 26 | "draft": true, 27 | "num": 1, 28 | "preview": "processmd\n\nProcess a directory of", 29 | "title": "processmd", 30 | "dir": "test/data/output", 31 | "base": "frontmatter.json", 32 | "ext": ".json", 33 | "sourceBase": "frontmatter.md", 34 | "sourceExt": ".md" 35 | }, 36 | "test/data/output/frontmatter2.json": { 37 | "test": "frontmatter", 38 | "draft": true, 39 | "num": 1, 40 | "preview": "Some text that might be a title\n\nProcess", 41 | "title": "Some text that might be a title", 42 | "dir": "test/data/output", 43 | "base": "frontmatter2.json", 44 | "ext": ".json", 45 | "sourceBase": "frontmatter2.md", 46 | "sourceExt": ".md" 47 | }, 48 | "test/data/output/L1/L2/test2.json": { 49 | "name": "yaml2", 50 | "deep": true, 51 | "count": 10000, 52 | "dir": "test/data/output/L1/L2", 53 | "base": "test2.json", 54 | "ext": ".json", 55 | "sourceBase": "test2.yml", 56 | "sourceExt": ".yml" 57 | }, 58 | "test/data/output/L1/test.json": { 59 | "type": "yaml", 60 | "draft": false, 61 | "num": 10, 62 | "object": { 63 | "prop1": true, 64 | "foo": "bar" 65 | }, 66 | "list": [ 67 | "hi", 68 | "bye", 69 | 1 70 | ], 71 | "dir": "test/data/output/L1", 72 | "base": "test.json", 73 | "ext": ".json", 74 | "sourceBase": "test.yml", 75 | "sourceExt": ".yml" 76 | }, 77 | "test/data/output/README.json": { 78 | "preview": "processmd\n\nProcess a directory of", 79 | "title": "processmd", 80 | "dir": "test/data/output", 81 | "base": "README.json", 82 | "ext": ".json", 83 | "sourceBase": "README.md", 84 | "sourceExt": ".md" 85 | } 86 | }, 87 | "sourceFileArray": [ 88 | "test/data/input/big-markdown.md", 89 | "test/data/input/frontmatter-code.md", 90 | "test/data/input/frontmatter.md", 91 | "test/data/input/frontmatter2.md", 92 | "test/data/input/L1/L2/test2.yml", 93 | "test/data/input/L1/test.yml", 94 | "test/data/input/README.md" 95 | ] 96 | } -------------------------------------------------------------------------------- /test/data/input/big-markdown.md: -------------------------------------------------------------------------------- 1 | An h1 header 2 | ============ 3 | 4 | Paragraphs are separated by a blank line. 5 | 6 | 2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized lists 7 | look like: 8 | 9 | * this one 10 | * that one 11 | * the other one 12 | 13 | Note that --- not considering the asterisk --- the actual text 14 | content starts at 4-columns in. 15 | 16 | > Block quotes are 17 | > written like so. 18 | > 19 | > They can span multiple paragraphs, 20 | > if you like. 21 | 22 | Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., "it's all 23 | in chapters 12--14"). Three dots ... will be converted to an ellipsis. 24 | Unicode is supported. ☺ 25 | 26 | 27 | 28 | An h2 header 29 | ------------ 30 | 31 | Here's a numbered list: 32 | 33 | 1. first item 34 | 2. second item 35 | 3. third item 36 | 37 | Note again how the actual text starts at 4 columns in (4 characters 38 | from the left side). Here's a code sample: 39 | 40 | # Let me re-iterate ... 41 | for i in 1 .. 10 { do-something(i) } 42 | 43 | As you probably guessed, indented 4 spaces. By the way, instead of 44 | indenting the block, you can use delimited blocks, if you like: 45 | 46 | ~~~ 47 | define foobar() { 48 | print "Welcome to flavor country!"; 49 | } 50 | ~~~ 51 | 52 | (which makes copying & pasting easier). You can optionally mark the 53 | delimited block for Pandoc to syntax highlight it: 54 | 55 | ~~~python 56 | import time 57 | # Quick, count to ten! 58 | for i in range(10): 59 | # (but not *too* quick) 60 | time.sleep(0.5) 61 | print i 62 | ~~~ 63 | 64 | 65 | 66 | ### An h3 header ### 67 | 68 | Now a nested list: 69 | 70 | 1. First, get these ingredients: 71 | 72 | * carrots 73 | * celery 74 | * lentils 75 | 76 | 2. Boil some water. 77 | 78 | 3. Dump everything in the pot and follow 79 | this algorithm: 80 | 81 | find wooden spoon 82 | uncover pot 83 | stir 84 | cover pot 85 | balance wooden spoon precariously on pot handle 86 | wait 10 minutes 87 | goto first step (or shut off burner when done) 88 | 89 | Do not bump wooden spoon or it will fall. 90 | 91 | Notice again how text always lines up on 4-space indents (including 92 | that last line which continues item 3 above). 93 | 94 | Here's a link to [a website](http://foo.bar), to a [local 95 | doc](local-doc.html), and to a [section heading in the current 96 | doc](#an-h2-header). Here's a footnote [^1]. 97 | 98 | [^1]: Footnote text goes here. 99 | 100 | Tables can look like this: 101 | 102 | size material color 103 | ---- ------------ ------------ 104 | 9 leather brown 105 | 10 hemp canvas natural 106 | 11 glass transparent 107 | 108 | Table: Shoes, their sizes, and what they're made of 109 | 110 | (The above is the caption for the table.) Pandoc also supports 111 | multi-line tables: 112 | 113 | -------- ----------------------- 114 | keyword text 115 | -------- ----------------------- 116 | red Sunsets, apples, and 117 | other red or reddish 118 | things. 119 | 120 | green Leaves, grass, frogs 121 | and other things it's 122 | not easy being. 123 | -------- ----------------------- 124 | 125 | A horizontal rule follows. 126 | 127 | *** 128 | 129 | Here's a definition list: 130 | 131 | apples 132 | : Good for making applesauce. 133 | oranges 134 | : Citrus! 135 | tomatoes 136 | : There's no "e" in tomatoe. 137 | 138 | Again, text is indented 4 spaces. (Put a blank line between each 139 | term/definition pair to spread things out more.) 140 | 141 | Here's a "line block": 142 | 143 | | Line one 144 | | Line too 145 | | Line tree 146 | 147 | and images can be specified like so: 148 | 149 | ![example image](example-image.jpg "An exemplary image") 150 | 151 | Inline math equations go in like so: $\omega = d\phi / dt$. Display 152 | math should get its own line and be put in in double-dollarsigns: 153 | 154 | $$I = \int \rho R^{2} dV$$ 155 | 156 | And note that you can backslash-escape any punctuation characters 157 | which you wish to be displayed literally, ex.: \`foo\`, \*bar\*, etc. 158 | -------------------------------------------------------------------------------- /test/data/back.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileMap": { 3 | "test/data/input/big-markdown.md": "An h1 header\n============\n\nParagraphs are separated by a blank line.\n\n2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized lists\nlook like:\n\n * this one\n * that one\n * the other one\n\nNote that --- not considering the asterisk --- the actual text\ncontent starts at 4-columns in.\n\n> Block quotes are\n> written like so.\n>\n> They can span multiple paragraphs,\n> if you like.\n\nUse 3 dashes for an em-dash. Use 2 dashes for ranges (ex., \"it's all\nin chapters 12--14\"). Three dots ... will be converted to an ellipsis.\nUnicode is supported. ☺\n\n\n\nAn h2 header\n------------\n\nHere's a numbered list:\n\n 1. first item\n 2. second item\n 3. third item\n\nNote again how the actual text starts at 4 columns in (4 characters\nfrom the left side). Here's a code sample:\n\n # Let me re-iterate ...\n for i in 1 .. 10 { do-something(i) }\n\nAs you probably guessed, indented 4 spaces. By the way, instead of\nindenting the block, you can use delimited blocks, if you like:\n\n~~~\ndefine foobar() {\n print \"Welcome to flavor country!\";\n}\n~~~\n\n(which makes copying & pasting easier). You can optionally mark the\ndelimited block for Pandoc to syntax highlight it:\n\n~~~python\nimport time\n# Quick, count to ten!\nfor i in range(10):\n # (but not *too* quick)\n time.sleep(0.5)\n print i\n~~~\n\n\n\n### An h3 header ###\n\nNow a nested list:\n\n 1. First, get these ingredients:\n\n * carrots\n * celery\n * lentils\n\n 2. Boil some water.\n\n 3. Dump everything in the pot and follow\n this algorithm:\n\n find wooden spoon\n uncover pot\n stir\n cover pot\n balance wooden spoon precariously on pot handle\n wait 10 minutes\n goto first step (or shut off burner when done)\n\n Do not bump wooden spoon or it will fall.\n\nNotice again how text always lines up on 4-space indents (including\nthat last line which continues item 3 above).\n\nHere's a link to [a website](http://foo.bar), to a [local\ndoc](local-doc.html), and to a [section heading in the current\ndoc](#an-h2-header). Here's a footnote [^1].\n\n[^1]: Footnote text goes here.\n\nTables can look like this:\n\nsize material color\n---- ------------ ------------\n9 leather brown\n10 hemp canvas natural\n11 glass transparent\n\nTable: Shoes, their sizes, and what they're made of\n\n(The above is the caption for the table.) Pandoc also supports\nmulti-line tables:\n\n-------- -----------------------\nkeyword text\n-------- -----------------------\nred Sunsets, apples, and\n other red or reddish\n things.\n\ngreen Leaves, grass, frogs\n and other things it's\n not easy being.\n-------- -----------------------\n\nA horizontal rule follows.\n\n***\n\nHere's a definition list:\n\napples\n : Good for making applesauce.\noranges\n : Citrus!\ntomatoes\n : There's no \"e\" in tomatoe.\n\nAgain, text is indented 4 spaces. (Put a blank line between each\nterm/definition pair to spread things out more.)\n\nHere's a \"line block\":\n\n| Line one\n| Line too\n| Line tree\n\nand images can be specified like so:\n\n![example image](example-image.jpg \"An exemplary image\")\n\nInline math equations go in like so: $\\omega = d\\phi / dt$. Display\nmath should get its own line and be put in in double-dollarsigns:\n\n$$I = \\int \\rho R^{2} dV$$\n\nAnd note that you can backslash-escape any punctuation characters\nwhich you wish to be displayed literally, ex.: \\`foo\\`, \\*bar\\*, etc.\n", 4 | "test/data/input/frontmatter-code.md": "---\ntest: frontmatter\ndraft: true\nnum: 1\n---\n\nSome text that might be a title\n\nProcess a directory of markdown *and* yaml files to JSON files\n\n```js\nfunction doStuff() {\n var a = 1 + 2\n console.log(a)\n}\n```\n", 5 | "test/data/input/frontmatter.md": "---\ntest: frontmatter\ndraft: true\nnum: 1\n---\n\n# processmd\n\nProcess a directory of markdown *and* yaml files to JSON files\n", 6 | "test/data/input/frontmatter2.md": "---\ntest: frontmatter\ndraft: true\nnum: 1\n---\n\nSome text that might be a title\n\nProcess [a](#) directory of markdown *and* yaml files to JSON files\n\n## H2 heading\n", 7 | "test/data/input/L1/L2/test2.yml": "name: yaml2\ndeep: true\ncount: 10000\n", 8 | "test/data/input/L1/test.yml": "type: yaml\ndraft: false\nnum: 10\nobject:\n prop1: true\n foo: bar\nlist:\n - hi\n - bye\n - 1\n", 9 | "test/data/input/README.md": "# processmd\n\nProcess a directory of markdown and yaml files to JSON files\n\nLinkify check: https://www.github.com/tscanlin/processmd\n" 10 | }, 11 | "sourceFileArray": [ 12 | "test/data/output/big-markdown.json", 13 | "test/data/output/frontmatter-code.json", 14 | "test/data/output/frontmatter.json", 15 | "test/data/output/frontmatter2.json", 16 | "test/data/output/L1/L2/test2.json", 17 | "test/data/output/L1/test.json", 18 | "test/data/output/README.json" 19 | ] 20 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # processmd 2 | 3 | ![Build Status](https://travis-ci.org/tscanlin/processmd.svg?branch=master) 4 | 5 | processmd uses [globby](https://github.com/sindresorhus/globby) and [markdown-it](https://github.com/markdown-it/markdown-it) to process directories of markdown and yaml files to a JSON files with html. It has many options to format the output as you like, you can convert a nested directory of yaml to json and optionally add a "summary" file with info about all the files. Additionally, with the `convertMode: "source"` option you can convert back from json to the input markdown and yaml files. This is mostly useful for blogs or static content for websites or other places where json is easier to use but the readability of yaml is useful. 6 | 7 | Comparison to similar tools: 8 | 9 | | Package | Processes folder to single file | Processes folder to multiple files | cli API | Uses gulp | includes metadata about file | Markdown preview | 10 | |---|---|---|---|---|---|---| 11 | | [markdown-to-json](https://www.npmjs.com/package/markdown-to-json) or [markdown-to-json-with-content](https://www.npmjs.com/package/markdown-to-json-with-content) | ✓ | × | ✓ | × | × | ✓ | 12 | | [gulp-markdown-to-json](https://github.com/sparkartgroup/gulp-markdown-to-json) | ✓ | ✓ | × | ✓ | ✓ | × | 13 | | [markdown-json](https://www.npmjs.com/package/markdown-json) | ✓ | × | ✓ | × | × | ✓ | 14 | | [**processmd**](https://github.com/tscanlin/processmd) | ✓ | ✓ | ✓ | × | ✓ | ✓ | 15 | 16 | I'll note that processmd can also convert back from json to yaml and it has a suite of tests. If you know a tool that you think should be on this list please open a PR. 17 | 18 | ## Getting Started 19 | 20 | Install with npm 21 | 22 | ```bash 23 | npm install --save-dev processmd 24 | ``` 25 | 26 | 27 | ## Usage 28 | 29 | You can then use the cli 30 | 31 | ```bash 32 | processmd "content/**/*.{yml,md}" --outputDir output 33 | ``` 34 | 35 | And watch files to automatically recompile them. 36 | 37 | ```bash 38 | processmd "content/**/*.{yml,md}" --outputDir output --watch 39 | ``` 40 | 41 | With an input markdown file such as this: 42 | ``` 43 | --- 44 | test: frontmatter 45 | draft: true 46 | num: 1 47 | --- 48 | 49 | # processmd 50 | 51 | Process a directory of markdown *and* yaml files to JSON files 52 | ``` 53 | 54 | This would be the resulting JSON: 55 | ``` 56 | { 57 | "test":"frontmatter", 58 | "draft":true, 59 | "num":1, 60 | "bodyContent":"# processmd\r\n\r\nProcess a directory of markdown *and* yaml files to JSON files", 61 | "bodyHtml":"

processmd

\n

Process a directory of markdown and yaml files to JSON files

\n", 62 | "title":"processmd", 63 | "dir":"test/data/output", 64 | "base":"frontmatter.json", 65 | "ext":".json", 66 | "sourceBase":"frontmatter.md", 67 | "sourceExt":".md" 68 | } 69 | ``` 70 | 71 | And given the following input directory: 72 | ```bash 73 | . 74 | ├── L1 75 | │   ├── L2 76 | │   │   └── test2.yml 77 | │   └── test.yml 78 | ├── README.md 79 | └── frontmatter.md 80 | ``` 81 | 82 | It would produce this directory output: 83 | ```bash 84 | . 85 | ├── L1 86 | │   ├── L2 87 | │   │   └── test2.json 88 | │   └── test.json 89 | ├── README.json 90 | └── frontmatter.json 91 | ``` 92 | 93 | ## Advanced Usage 94 | 95 | processmd will also output some summary data as a json object to stdout when used with the `--stdout` option. Then you can direct that to a file. 96 | 97 | ```bash 98 | processmd \"content/**/*.{yml,md}\" --stdout --outputDir output > summary.json 99 | ``` 100 | 101 | summary.json will contain: 102 | 103 | ``` 104 | { 105 | "fileMap":{ 106 | "test/data/output/frontmatter.json":"{...}", 107 | "test/data/output/L1/test.json":"{...}", 108 | ... 109 | } 110 | "sourceFileArray":[ 111 | "test/data/input/frontmatter.md", 112 | "test/data/input/L1/test.yml", 113 | ... 114 | } 115 | ``` 116 | 117 | 118 | ## Options 119 | 120 | ```js 121 | module.exports = { 122 | // The directory output will be processed to. 123 | outputDir: './dist', 124 | // Output location for the summary file (relative path to json file that has content from all files). 125 | summaryOutput: null, 126 | // Watch mode, recompile on file changes. 127 | watch: false, 128 | // Debounce timeout for watching files. 129 | watchDebounce: 1000, 130 | // Prefix for output filenames, default is no prefix, just the original filename. 131 | filenamePrefix: '', 132 | // For markdown files, rendering mathematical equations. 133 | renderLatex: true, 134 | // For markdown files, highlight code block. 135 | highlightCode: true, 136 | // For markdown files, how many characters should be included in an add `preview` property. 0 for no preview. 137 | preview: 0, 138 | // Option to override the preview delimeter to handle internationalization and add greater flexibility (default: ' '). 139 | previewDelimiter: ' ', 140 | // Include body props in summary file. 141 | includeBodyProps: false, 142 | // Include the markdown document title as `title` on the resulting json objects. 143 | includeTitle: true, 144 | // Include the directory as `dir` on the resulting json objects. 145 | includeDir: true, 146 | // Include the filename (.json) as `base` on the resulting json objects. 147 | includeBase: true, 148 | // Include the extension (.json) as `ext` on the resulting json objects. 149 | includeExt: true, 150 | // Include the source filename (.md / .yml) as `sourceBase` on the resulting json objects. 151 | includeSourceBase: true, 152 | // Include the source extension (.md / .yml) as `sourceExt` on the resulting json objects. 153 | includeSourceExt: true, 154 | // Convert mode. Possible options for this are 'json' or 'source'. 155 | convertMode: 'json', 156 | // Whether to output to stdout or not. 157 | stdout: false, 158 | // Custom markdown renderer function, null to use the default: `markdown-it`. 159 | markdownRenderer: null, 160 | // Options to pass to the default markdown processor, markdown-it. 161 | // See here for options: https://github.com/markdown-it/markdown-it#init-with-presets-and-options 162 | markdownOptions: {}, 163 | // Include generated ids on headings. 164 | headingIds: false 165 | } 166 | ``` 167 | 168 | To turn off options you can [prefix them with '--no-'](https://github.com/yargs/yargs/blob/master/docs/tricks.md#negate) 169 | 170 | For example, if you want to disable code highlighting you would run: 171 | 172 | ``` 173 | $ processmd ReadMe.md --no-highlightCode 174 | ``` 175 | 176 | ## Development 177 | 178 | To update tests, add new test files to `test/data/input`, and run `npm run start && npm run back` 179 | 180 | Enjoy! 181 | -------------------------------------------------------------------------------- /index.test.js: -------------------------------------------------------------------------------- 1 | const spawn = require('child_process').spawn 2 | const processmdLib = require('./index') 3 | 4 | const outputJson = require('./test/data/output.json') 5 | const outputSummaryJson = require('./test/data/outputSummary.json') 6 | const backJson = require('./test/data/back.json') 7 | 8 | describe('processmd', () => { 9 | it('should process a directory to JSON properly', done => { 10 | const cli = spawn('node', [ 11 | './cli.js', 12 | 'test/data/input/**/*.{yml,md}', 13 | '--stdout', 14 | '--outputDir', 15 | 'test/data/output' 16 | ]) 17 | 18 | cli.stdout.on('data', data => { 19 | const parsedData = JSON.parse(data.toString()) 20 | expect(parsedData.sourceFileArray).toEqual(outputJson.sourceFileArray) 21 | Object.keys(parsedData.fileMap).forEach(key => { 22 | Object.keys(parsedData.fileMap[key]).forEach(prop => { 23 | if ( 24 | typeof parsedData.fileMap[key][prop] === 'string' && 25 | (prop === 'bodyHtml' || prop === 'bodyContent') 26 | ) { 27 | // Fix for windows breaking tests with different newline character. 28 | expect( 29 | parsedData.fileMap[key][prop].split('\r\n').join('\n') 30 | ).toEqual(outputJson.fileMap[key][prop].split('\r\n').join('\n')) 31 | } else { 32 | expect(parsedData.fileMap[key][prop]).toEqual( 33 | outputJson.fileMap[key][prop] 34 | ) 35 | } 36 | }) 37 | }) 38 | }) 39 | 40 | cli.on('close', code => { 41 | expect(code).toEqual(0) 42 | done() 43 | }) 44 | }) 45 | 46 | it('should process a directory to JSON properly with a summary file', done => { 47 | const cli = spawn('node', [ 48 | './cli.js', 49 | 'test/data/input/**/*.{yml,md}', 50 | '--stdout', 51 | '--outputDir', 52 | 'test/data/output', 53 | '--preview', 54 | '40' 55 | ]) 56 | 57 | cli.stdout.on('data', data => { 58 | const parsedData = JSON.parse(data.toString()) 59 | expect(parsedData.sourceFileArray).toEqual(outputSummaryJson.sourceFileArray) 60 | Object.keys(parsedData.fileMap).forEach(key => { 61 | Object.keys(parsedData.fileMap[key]).forEach(prop => { 62 | if ( 63 | typeof parsedData.fileMap[key][prop] === 'string' && 64 | (prop === 'bodyHtml' || prop === 'bodyContent') 65 | ) { 66 | // Fix for windows breaking tests with different newline character. 67 | expect( 68 | parsedData.fileMap[key][prop].split('\r\n').join('\n') 69 | ).toEqual(outputSummaryJson.fileMap[key][prop].split('\r\n').join('\n')) 70 | } else { 71 | expect(parsedData.fileMap[key][prop]).toEqual( 72 | outputSummaryJson.fileMap[key][prop] 73 | ) 74 | } 75 | }) 76 | }) 77 | }) 78 | 79 | cli.on('close', code => { 80 | expect(code).toEqual(0) 81 | done() 82 | }) 83 | }) 84 | 85 | it('should process a directory back to source properly', done => { 86 | const cli = spawn('node', [ 87 | './cli.js', 88 | 'test/data/output/**/*.json', 89 | '--convertMode', 90 | 'source', 91 | '--stdout', 92 | '--outputDir', 93 | 'test/data/back' 94 | ]) 95 | 96 | cli.stdout.on('data', data => { 97 | const parsedData = JSON.parse(data.toString()) 98 | expect(parsedData.sourceFileArray).toEqual(backJson.sourceFileArray) 99 | Object.keys(parsedData.fileMap).forEach(key => { 100 | expect(parsedData.fileMap[key].split('\r\n').join('\n')).toEqual( 101 | backJson.fileMap[key] 102 | ) 103 | }) 104 | }) 105 | 106 | cli.on('close', code => { 107 | expect(code).toEqual(0) 108 | done() 109 | }) 110 | }) 111 | 112 | it('#isMarkdown should properly determine markdown files', () => { 113 | expect( 114 | processmdLib._isMarkdown({ 115 | bodyContent: 'Hi!', 116 | bodyHtml: '

Hi!

' 117 | }) 118 | ).toBe(true) 119 | }) 120 | 121 | it('#isMarkdown should properly determine when files are NOT markdown files', () => { 122 | expect( 123 | processmdLib._isMarkdown({ 124 | title: 'Foo', 125 | someProp1: true 126 | }) 127 | ).toBe(false) 128 | }) 129 | 130 | it('#findCommonDir should find the lowest common parent from an array of files', () => { 131 | expect( 132 | processmdLib._findCommonDir([ 133 | 'test/data/output/frontmatter.json', 134 | 'test/data/output/L1/L2/test2.json', 135 | 'test/data/output/L1/test.json', 136 | 'test/data/output/README.json' 137 | ]) 138 | ).toBe('test/data/output/') 139 | }) 140 | 141 | it('#findCommonDir should match complete paths only', () => { 142 | expect( 143 | processmdLib._findCommonDir([ 144 | 'content/pages', 145 | 'content/posts' 146 | ]) 147 | ).toBe('content/') 148 | 149 | expect( 150 | processmdLib._findCommonDir([ 151 | 'pages/2016/about.md', 152 | 'posts/drafts/hello_world.md', 153 | 'posts/drafts/test_post.md' 154 | ]) 155 | ).toBe('') 156 | 157 | expect( 158 | processmdLib._findCommonDir([ 159 | 'pages/about.md' 160 | ]) 161 | ).toBe('pages/') 162 | 163 | expect( 164 | processmdLib._findCommonDir([ 165 | 'about.md' 166 | ]) 167 | ).toBe('') 168 | }) 169 | 170 | it('should parse markdownOptions if argument is JSON', done => { 171 | const cli = spawn('node', [ 172 | './cli.js', 173 | 'test/data/input/README.md', 174 | '--includeBodyProps', 175 | '--markdownOptions', 176 | '{"linkify":true}', 177 | '--stdout', 178 | '--outputDir', 179 | 'test/data/output' 180 | ]) 181 | 182 | const output = [] 183 | cli.stdout.on('data', data => { 184 | output.push(data.toString()) 185 | }) 186 | 187 | cli.on('close', code => { 188 | const parsedOutput = JSON.parse(output.join('')) 189 | expect(parsedOutput.fileMap['test/data/output/README.json'].bodyHtml.indexOf(' { 196 | const cli = spawn('node', [ 197 | './cli.js', 198 | 'test/data/input/**/*.{yml,md}', 199 | '--stdout', 200 | '--outputDir', 201 | 'test/data/output', 202 | '--markdownOptions zero' 203 | ]) 204 | 205 | cli.on('close', code => { 206 | expect(code).toEqual(0) 207 | done() 208 | }) 209 | }) 210 | }) 211 | -------------------------------------------------------------------------------- /test/data/output.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileMap": { 3 | "test/data/output/big-markdown.json": { 4 | "bodyContent": "An h1 header\n============\n\nParagraphs are separated by a blank line.\n\n2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized lists\nlook like:\n\n * this one\n * that one\n * the other one\n\nNote that --- not considering the asterisk --- the actual text\ncontent starts at 4-columns in.\n\n> Block quotes are\n> written like so.\n>\n> They can span multiple paragraphs,\n> if you like.\n\nUse 3 dashes for an em-dash. Use 2 dashes for ranges (ex., \"it's all\nin chapters 12--14\"). Three dots ... will be converted to an ellipsis.\nUnicode is supported. ☺\n\n\n\nAn h2 header\n------------\n\nHere's a numbered list:\n\n 1. first item\n 2. second item\n 3. third item\n\nNote again how the actual text starts at 4 columns in (4 characters\nfrom the left side). Here's a code sample:\n\n # Let me re-iterate ...\n for i in 1 .. 10 { do-something(i) }\n\nAs you probably guessed, indented 4 spaces. By the way, instead of\nindenting the block, you can use delimited blocks, if you like:\n\n~~~\ndefine foobar() {\n print \"Welcome to flavor country!\";\n}\n~~~\n\n(which makes copying & pasting easier). You can optionally mark the\ndelimited block for Pandoc to syntax highlight it:\n\n~~~python\nimport time\n# Quick, count to ten!\nfor i in range(10):\n # (but not *too* quick)\n time.sleep(0.5)\n print i\n~~~\n\n\n\n### An h3 header ###\n\nNow a nested list:\n\n 1. First, get these ingredients:\n\n * carrots\n * celery\n * lentils\n\n 2. Boil some water.\n\n 3. Dump everything in the pot and follow\n this algorithm:\n\n find wooden spoon\n uncover pot\n stir\n cover pot\n balance wooden spoon precariously on pot handle\n wait 10 minutes\n goto first step (or shut off burner when done)\n\n Do not bump wooden spoon or it will fall.\n\nNotice again how text always lines up on 4-space indents (including\nthat last line which continues item 3 above).\n\nHere's a link to [a website](http://foo.bar), to a [local\ndoc](local-doc.html), and to a [section heading in the current\ndoc](#an-h2-header). Here's a footnote [^1].\n\n[^1]: Footnote text goes here.\n\nTables can look like this:\n\nsize material color\n---- ------------ ------------\n9 leather brown\n10 hemp canvas natural\n11 glass transparent\n\nTable: Shoes, their sizes, and what they're made of\n\n(The above is the caption for the table.) Pandoc also supports\nmulti-line tables:\n\n-------- -----------------------\nkeyword text\n-------- -----------------------\nred Sunsets, apples, and\n other red or reddish\n things.\n\ngreen Leaves, grass, frogs\n and other things it's\n not easy being.\n-------- -----------------------\n\nA horizontal rule follows.\n\n***\n\nHere's a definition list:\n\napples\n : Good for making applesauce.\noranges\n : Citrus!\ntomatoes\n : There's no \"e\" in tomatoe.\n\nAgain, text is indented 4 spaces. (Put a blank line between each\nterm/definition pair to spread things out more.)\n\nHere's a \"line block\":\n\n| Line one\n| Line too\n| Line tree\n\nand images can be specified like so:\n\n![example image](example-image.jpg \"An exemplary image\")\n\nInline math equations go in like so: $\\omega = d\\phi / dt$. Display\nmath should get its own line and be put in in double-dollarsigns:\n\n$$I = \\int \\rho R^{2} dV$$\n\nAnd note that you can backslash-escape any punctuation characters\nwhich you wish to be displayed literally, ex.: \\`foo\\`, \\*bar\\*, etc.", 5 | "bodyHtml": "

An h1 header

\n

Paragraphs are separated by a blank line.

\n

2nd paragraph. Italic, bold, and monospace. Itemized lists\nlook like:

\n
    \n
  • this one
  • \n
  • that one
  • \n
  • the other one
  • \n
\n

Note that --- not considering the asterisk --- the actual text\ncontent starts at 4-columns in.

\n
\n

Block quotes are\nwritten like so.

\n

They can span multiple paragraphs,\nif you like.

\n
\n

Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., "it's all\nin chapters 12--14"). Three dots ... will be converted to an ellipsis.\nUnicode is supported. ☺

\n

An h2 header

\n

Here's a numbered list:

\n
    \n
  1. first item
  2. \n
  3. second item
  4. \n
  5. third item
  6. \n
\n

Note again how the actual text starts at 4 columns in (4 characters\nfrom the left side). Here's a code sample:

\n
# Let me re-iterate ...\nfor i in 1 .. 10 { do-something(i) }\n
\n

As you probably guessed, indented 4 spaces. By the way, instead of\nindenting the block, you can use delimited blocks, if you like:

\n
define foobar() {\n    print "Welcome to flavor country!";\n}\n
\n

(which makes copying & pasting easier). You can optionally mark the\ndelimited block for Pandoc to syntax highlight it:

\n
import time\n# Quick, count to ten!\nfor i in range(10):\n    # (but not *too* quick)\n    time.sleep(0.5)\n    print i

An h3 header

\n

Now a nested list:

\n
    \n
  1. \n

    First, get these ingredients:

    \n
      \n
    • carrots
    • \n
    • celery
    • \n
    • lentils
    • \n
    \n
  2. \n
  3. \n

    Boil some water.

    \n
  4. \n
  5. \n

    Dump everything in the pot and follow\nthis algorithm:

    \n
    find wooden spoon\nuncover pot\nstir\ncover pot\nbalance wooden spoon precariously on pot handle\nwait 10 minutes\ngoto first step (or shut off burner when done)\n
    \n

    Do not bump wooden spoon or it will fall.

    \n
  6. \n
\n

Notice again how text always lines up on 4-space indents (including\nthat last line which continues item 3 above).

\n

Here's a link to a website, to a local\ndoc, and to a section heading in the current\ndoc. Here's a footnote [^1].

\n

[^1]: Footnote text goes here.

\n

Tables can look like this:

\n

size material color

\n
\n

9 leather brown\n10 hemp canvas natural\n11 glass transparent

\n

Table: Shoes, their sizes, and what they're made of

\n

(The above is the caption for the table.) Pandoc also supports\nmulti-line tables:

\n
\n

keyword text

\n
\n

red Sunsets, apples, and\nother red or reddish\nthings.

\n

green Leaves, grass, frogs\nand other things it's\nnot easy being.

\n
\n

A horizontal rule follows.

\n
\n

Here's a definition list:

\n

apples\n: Good for making applesauce.\noranges\n: Citrus!\ntomatoes\n: There's no "e" in tomatoe.

\n

Again, text is indented 4 spaces. (Put a blank line between each\nterm/definition pair to spread things out more.)

\n

Here's a "line block":

\n

| Line one\n| Line too\n| Line tree

\n

and images can be specified like so:

\n

\"example

\n

Inline math equations go in like so: $\\omega = d\\phi / dt$. Display\nmath should get its own line and be put in in double-dollarsigns:

\n

$$I = \\int \\rho R^{2} dV$$

\n

And note that you can backslash-escape any punctuation characters\nwhich you wish to be displayed literally, ex.: `foo`, *bar*, etc.

\n", 6 | "title": "An h1 header", 7 | "dir": "test/data/output", 8 | "base": "big-markdown.json", 9 | "ext": ".json", 10 | "sourceBase": "big-markdown.md", 11 | "sourceExt": ".md" 12 | }, 13 | "test/data/output/frontmatter-code.json": { 14 | "test": "frontmatter", 15 | "draft": true, 16 | "num": 1, 17 | "bodyContent": "Some text that might be a title\n\nProcess a directory of markdown *and* yaml files to JSON files\n\n```js\nfunction doStuff() {\n var a = 1 + 2\n console.log(a)\n}\n```", 18 | "bodyHtml": "

Some text that might be a title

\n

Process a directory of markdown and yaml files to JSON files

\n
function doStuff() {\n  var a = 1 + 2\n  console.log(a)\n}
", 19 | "title": "Some text that might be a title", 20 | "dir": "test/data/output", 21 | "base": "frontmatter-code.json", 22 | "ext": ".json", 23 | "sourceBase": "frontmatter-code.md", 24 | "sourceExt": ".md" 25 | }, 26 | "test/data/output/frontmatter.json": { 27 | "test": "frontmatter", 28 | "draft": true, 29 | "num": 1, 30 | "bodyContent": "# processmd\n\nProcess a directory of markdown *and* yaml files to JSON files", 31 | "bodyHtml": "

processmd

\n

Process a directory of markdown and yaml files to JSON files

\n", 32 | "title": "processmd", 33 | "dir": "test/data/output", 34 | "base": "frontmatter.json", 35 | "ext": ".json", 36 | "sourceBase": "frontmatter.md", 37 | "sourceExt": ".md" 38 | }, 39 | "test/data/output/frontmatter2.json": { 40 | "test": "frontmatter", 41 | "draft": true, 42 | "num": 1, 43 | "bodyContent": "Some text that might be a title\n\nProcess [a](#) directory of markdown *and* yaml files to JSON files\n\n## H2 heading", 44 | "bodyHtml": "

Some text that might be a title

\n

Process a directory of markdown and yaml files to JSON files

\n

H2 heading

\n", 45 | "title": "Some text that might be a title", 46 | "dir": "test/data/output", 47 | "base": "frontmatter2.json", 48 | "ext": ".json", 49 | "sourceBase": "frontmatter2.md", 50 | "sourceExt": ".md" 51 | }, 52 | "test/data/output/L1/L2/test2.json": { 53 | "name": "yaml2", 54 | "deep": true, 55 | "count": 10000, 56 | "dir": "test/data/output/L1/L2", 57 | "base": "test2.json", 58 | "ext": ".json", 59 | "sourceBase": "test2.yml", 60 | "sourceExt": ".yml" 61 | }, 62 | "test/data/output/L1/test.json": { 63 | "type": "yaml", 64 | "draft": false, 65 | "num": 10, 66 | "object": { 67 | "prop1": true, 68 | "foo": "bar" 69 | }, 70 | "list": [ 71 | "hi", 72 | "bye", 73 | 1 74 | ], 75 | "dir": "test/data/output/L1", 76 | "base": "test.json", 77 | "ext": ".json", 78 | "sourceBase": "test.yml", 79 | "sourceExt": ".yml" 80 | }, 81 | "test/data/output/README.json": { 82 | "bodyContent": "# processmd\n\nProcess a directory of markdown and yaml files to JSON files\n\nLinkify check: https://www.github.com/tscanlin/processmd", 83 | "bodyHtml": "

processmd

\n

Process a directory of markdown and yaml files to JSON files

\n

Linkify check: https://www.github.com/tscanlin/processmd

\n", 84 | "title": "processmd", 85 | "dir": "test/data/output", 86 | "base": "README.json", 87 | "ext": ".json", 88 | "sourceBase": "README.md", 89 | "sourceExt": ".md" 90 | } 91 | }, 92 | "sourceFileArray": [ 93 | "test/data/input/big-markdown.md", 94 | "test/data/input/frontmatter-code.md", 95 | "test/data/input/frontmatter.md", 96 | "test/data/input/frontmatter2.md", 97 | "test/data/input/L1/L2/test2.yml", 98 | "test/data/input/L1/test.yml", 99 | "test/data/input/README.md" 100 | ] 101 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const fs = require('fs') 4 | const path = require('path') 5 | const globby = require('globby') 6 | const MarkdownIt = require('markdown-it') 7 | const markdownItLatex = require('markdown-it-latex').default 8 | const yaml = require('js-yaml') 9 | const mkdirp = require('mkdirp') 10 | const removeMd = require('remove-markdown') 11 | const markdownItHighlight = require('./utils/markdown-it-highlight.js') 12 | const defaultOptions = require('./defaultOptions') 13 | 14 | const EXTENSIONS = { 15 | JSON: '.json', 16 | MD: '.md', 17 | YML: '.yml' 18 | } 19 | const NEWLINE = '\n' 20 | const FRONTMATTER_SEPERATOR = '---' 21 | 22 | const SOURCE_MODE = 'source' 23 | 24 | // Main function 25 | function processmd (options, callback) { 26 | options = Object.assign({}, defaultOptions, options) 27 | 28 | const markdownIt = MarkdownIt(options.markdownOptions) 29 | 30 | if (options.renderLatex) { 31 | markdownIt.use(markdownItLatex) 32 | } 33 | 34 | if (options.highlightCode) { 35 | markdownIt.use(markdownItHighlight) 36 | } 37 | if (options.headingIds) { 38 | markdownIt.use(require('markdown-it-named-headings')) 39 | } 40 | 41 | options.markdownRenderer = options.markdownRenderer || function mdRender (str) { return markdownIt.render(str) } 42 | 43 | const globs = (options.files || []).concat(options._ || []) 44 | if (globs.length === 0) { 45 | throw new Error('You must pass file patterns in to be processed.') 46 | } 47 | 48 | const p = new Promise(function (resolve, reject) { 49 | globby(globs).then(function (result) { 50 | const commonDir = findCommonDir(result) 51 | options._commonDir = commonDir 52 | 53 | if (options.watch) { 54 | const d = debounce( 55 | function () { 56 | processOutput() 57 | }, 58 | options.watchDebounce, 59 | true 60 | ) 61 | 62 | // fs.watch isn't supported on linux. 63 | try { 64 | fs.watch(commonDir, { recursive: true }, function (event, filename) { 65 | d() 66 | }) 67 | } catch (e) { 68 | console.log(e) 69 | } 70 | } 71 | 72 | let processingFunc = processYamlAndMarkdown 73 | if (typeof options._customProcessingFunc === 'function') { 74 | processingFunc = options._customProcessingFunc // used for testing. 75 | } else if (options.convertMode === SOURCE_MODE) { 76 | processingFunc = processJson 77 | } 78 | 79 | function processOutput () { 80 | const summaryObj = {} 81 | summaryObj.fileMap = {} 82 | // Case insensitive array to stay backwards compatible for now. 83 | summaryObj.sourceFileArray = result.sort(function (a, b) { 84 | return a.toLowerCase().localeCompare(b.toLowerCase()) 85 | }) 86 | let finishCount = 0 87 | const summaryArray = [] 88 | result.forEach(function (file, i) { 89 | processingFunc(file, options, function (newFile, content) { 90 | finishCount++ 91 | 92 | // Replace backslashes with forward slashes to keep windows consistent. 93 | const filename = replaceBackslashes(newFile) 94 | 95 | // Remove body props from summary. 96 | if (!options.includeBodyProps) { 97 | content = removeBodyProps(content) 98 | } 99 | 100 | const val = options.convertMode === SOURCE_MODE 101 | ? content 102 | : JSON.parse(content) 103 | summaryObj.fileMap[filename] = val 104 | summaryArray.push(val) 105 | 106 | if (finishCount === result.length) { 107 | // Sort the files. 108 | const sortedObj = {} 109 | Object.keys(summaryObj.fileMap) 110 | .sort(function (a, b) { 111 | return a.toLowerCase().localeCompare(b.toLowerCase()) 112 | }) 113 | .forEach(function (v, i) { 114 | sortedObj[v] = summaryObj.fileMap[v] 115 | }) 116 | summaryObj.fileMap = sortedObj 117 | 118 | if (options.summaryOutput) { 119 | if (options.summaryOutputFormat === 'array') { 120 | writeFileContent(options.summaryOutput, JSON.stringify(summaryArray, null, 2), function (e, d) { 121 | resolve(summaryArray) 122 | }) 123 | } else { 124 | writeFileContent(options.summaryOutput, JSON.stringify(summaryObj, null, 2), function (e, d) { 125 | resolve(summaryObj) 126 | }) 127 | } 128 | } else { 129 | resolve(summaryObj) 130 | } 131 | } 132 | }) 133 | }) 134 | } 135 | 136 | processOutput() 137 | }) 138 | }) 139 | 140 | // Enable callback support too. 141 | if (callback) { 142 | p.then(result => { 143 | callback(null, result) 144 | }) 145 | } 146 | 147 | return p 148 | } 149 | 150 | function processYamlAndMarkdown (file, options, cb) { 151 | readFileContent(file, (err, file, fileContent) => { 152 | if (err) throw (err) 153 | const hasFrontmatter = fileContent.indexOf(FRONTMATTER_SEPERATOR) === 0 154 | const isYaml = file.endsWith('.yaml') || file.endsWith('.yml') 155 | let content = fileContent.trim() 156 | let frontmatter = {} 157 | let jsonData = {} 158 | 159 | // Markdown. 160 | if (hasFrontmatter) { 161 | const splitContent = fileContent.match(/^-{3}[\s\S]+?-{3}/) 162 | frontmatter = yaml.safeLoad(splitContent[0].substring(3, splitContent[0].length - 3)) 163 | content = fileContent.substring(splitContent[0].length).trim() 164 | } 165 | 166 | if (isYaml) { 167 | jsonData = yaml.safeLoad(content) 168 | } else { 169 | jsonData = Object.assign({}, frontmatter, { 170 | bodyContent: content, 171 | bodyHtml: options.markdownRenderer(content) 172 | }) 173 | } 174 | 175 | // Rename to the new file. 176 | const baseFilename = file.replace(options._commonDir, '') 177 | const parsedPath = path.parse(path.join(options.outputDir, baseFilename)) 178 | const sourceExt = parsedPath.ext 179 | const sourceBase = parsedPath.base 180 | const newPathObj = Object.assign({}, parsedPath, { 181 | ext: EXTENSIONS.JSON, 182 | base: options.filenamePrefix + 183 | parsedPath.base.replace(sourceExt, EXTENSIONS.JSON) 184 | }) 185 | const newPath = path.format(newPathObj) 186 | 187 | if (options.preview > 0 && jsonData.bodyContent) { 188 | const preview = removeMd(jsonData.bodyContent).split('\r').join('') // fix Windows eol. 189 | let splitPoint = 0 190 | let i = splitPoint 191 | while (i < options.preview) { 192 | i++ 193 | if (preview[i] === options.previewDelimiter) { 194 | splitPoint = i 195 | } 196 | if (preview[i] === undefined) { 197 | splitPoint = i 198 | break 199 | } 200 | } 201 | jsonData.preview = preview.substring(0, splitPoint).trim() 202 | } 203 | if (options.includeTitle && jsonData.bodyContent) { 204 | jsonData.title = jsonData.title || jsonData.bodyHtml.match(/>(.*?)<\//)[1] 205 | } 206 | if (options.includeDir) { 207 | jsonData.dir = replaceBackslashes(path.dirname(newPath)) 208 | } 209 | if (options.includeBase) { 210 | jsonData.base = path.basename(newPath) 211 | } 212 | if (options.includeExt) { 213 | jsonData.ext = EXTENSIONS.JSON 214 | } 215 | if (options.includeSourceBase) { 216 | jsonData.sourceBase = sourceBase 217 | } 218 | if (options.includeSourceExt) { 219 | jsonData.sourceExt = sourceExt 220 | } 221 | 222 | // TODO: make this a default callback 223 | // 2 spaces indent for stringify. 224 | writeFileContent(newPath, JSON.stringify(jsonData, null, 2), function (e, d) { 225 | cb(newPath, JSON.stringify(jsonData)) 226 | }) 227 | }) 228 | } 229 | 230 | function processJson (file, options, cb) { 231 | readFileContent(file, (err, file, fileContent) => { 232 | if (err) throw (err) 233 | const fileData = JSON.parse(fileContent) 234 | 235 | // Process content. 236 | let newContent = '' 237 | const cleanProps = cleanFileProps( 238 | cleanMarkdownProps(Object.assign({}, fileData)) 239 | ) 240 | const cleanYaml = yaml.safeDump(cleanProps) 241 | let extension = '.yml' 242 | if (isMarkdown(fileData)) { 243 | newContent += fileData.bodyContent + NEWLINE 244 | if (Object.keys(cleanProps).length > 0) { 245 | newContent = 246 | FRONTMATTER_SEPERATOR + NEWLINE + 247 | cleanYaml + 248 | FRONTMATTER_SEPERATOR + NEWLINE + NEWLINE + 249 | newContent 250 | } 251 | extension = '.md' 252 | } else { 253 | newContent = cleanYaml 254 | } 255 | 256 | // Rename to the new file. 257 | const baseFilename = file.replace(options._commonDir, '') 258 | const parsedPath = path.parse(path.join(options.outputDir, baseFilename)) 259 | const sourceExt = parsedPath.ext 260 | // const sourceBase = parsedPath.base 261 | const newPathObj = Object.assign({}, parsedPath, { 262 | ext: extension, 263 | base: options.filenamePrefix + 264 | parsedPath.base.replace(sourceExt, extension) 265 | }) 266 | const newPath = path.format(newPathObj) 267 | 268 | writeFileContent(newPath, newContent, function (e, d) { 269 | cb(newPath, newContent) 270 | }) 271 | }) 272 | } 273 | 274 | function cleanFileProps (obj) { 275 | delete obj.dir 276 | delete obj.base 277 | delete obj.ext 278 | delete obj.sourceBase 279 | delete obj.sourceExt 280 | return obj 281 | } 282 | 283 | function cleanMarkdownProps (obj) { 284 | delete obj.bodyContent 285 | delete obj.bodyHtml 286 | delete obj.preview 287 | delete obj.title 288 | return obj 289 | } 290 | 291 | // Read a file making sure that it is not a directory first. 292 | function readFileContent (file, cb) { 293 | if (!file || fs.lstatSync(file).isDirectory()) { 294 | return null 295 | } 296 | fs.readFile(file, (err, data) => { 297 | cb(err, file, data && data.toString()) 298 | }) 299 | } 300 | 301 | // Write a file making sure the directory exists first. 302 | function writeFileContent (file, content, cb) { 303 | mkdirp(path.dirname(file), function (err) { 304 | if (err) throw (err) 305 | fs.writeFile(file, content, (e, data) => { 306 | cb(e, data) 307 | }) 308 | }) 309 | } 310 | 311 | // Replace backslashes for windows paths. 312 | function replaceBackslashes (str) { 313 | return str.split('\\').join('/') 314 | } 315 | 316 | // Determine if its data for a markdown file. 317 | function isMarkdown (data) { 318 | return Boolean(data.bodyContent && data.bodyHtml) 319 | } 320 | 321 | // Find the common parent directory given an array of files. 322 | function findCommonDir (files) { 323 | const path = files.reduce((path, file, fileIndex) => { 324 | // If it's a file not in any directory then just skip it 325 | // by assigning the previous value. 326 | if (!file.includes('/')) { 327 | return path 328 | } 329 | 330 | // No path set yet 331 | if (!path && fileIndex === 0) { 332 | return file.substr(0, file.lastIndexOf('/') + 1) 333 | } else { 334 | // Get index of last shared character 335 | let sharedIndex = Array.from(path).findIndex((element, index) => { 336 | if (file[index] !== element) { 337 | return index - 1 338 | } 339 | }) 340 | 341 | // Round to nearest full directory 342 | if (sharedIndex > -1) { 343 | sharedIndex = path.substr(0, sharedIndex).lastIndexOf('/') 344 | } 345 | 346 | // Return shared directory path 347 | if (sharedIndex > -1) { 348 | return path.substr(0, sharedIndex + 1) 349 | } else if (file.startsWith(path)) { 350 | return path 351 | } 352 | 353 | // No shared directory path 354 | return '' 355 | } 356 | }, '') 357 | 358 | return path 359 | } 360 | 361 | // Remove body props from summary. 362 | function removeBodyProps (content) { 363 | try { 364 | const json = JSON.parse(content) 365 | delete json.bodyContent 366 | delete json.bodyHtml 367 | return JSON.stringify(json) 368 | } catch (e) { } 369 | } 370 | 371 | // Debounce from: https://davidwalsh.name/function-debounce 372 | function debounce (func, wait, immediate) { 373 | var timeout 374 | return function () { 375 | var context = this 376 | var args = arguments 377 | var later = function () { 378 | timeout = null 379 | if (!immediate) func.apply(context, args) 380 | } 381 | var callNow = immediate && !timeout 382 | clearTimeout(timeout) 383 | timeout = setTimeout(later, wait) 384 | if (callNow) func.apply(context, args) 385 | } 386 | } 387 | 388 | module.exports = { 389 | default: processmd, 390 | _readFileContent: readFileContent, // for testing. 391 | _writeFileContent: writeFileContent, // for testing. 392 | _isMarkdown: isMarkdown, // for testing. 393 | _findCommonDir: findCommonDir // for testing. 394 | } 395 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.12.11" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.10.4": 13 | version "7.12.11" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" 15 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.10.4" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 20 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.10.4" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@nodelib/fs.scandir@2.1.3": 27 | version "2.1.3" 28 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" 29 | integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== 30 | dependencies: 31 | "@nodelib/fs.stat" "2.0.3" 32 | run-parallel "^1.1.9" 33 | 34 | "@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": 35 | version "2.0.3" 36 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" 37 | integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== 38 | 39 | "@nodelib/fs.walk@^1.2.3": 40 | version "1.2.4" 41 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" 42 | integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== 43 | dependencies: 44 | "@nodelib/fs.scandir" "2.1.3" 45 | fastq "^1.6.0" 46 | 47 | "@types/glob@^7.1.1": 48 | version "7.1.3" 49 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" 50 | integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== 51 | dependencies: 52 | "@types/minimatch" "*" 53 | "@types/node" "*" 54 | 55 | "@types/minimatch@*": 56 | version "3.0.3" 57 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" 58 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== 59 | 60 | "@types/node@*": 61 | version "14.14.16" 62 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.16.tgz#3cc351f8d48101deadfed4c9e4f116048d437b4b" 63 | integrity sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw== 64 | 65 | acorn-jsx@^5.2.0: 66 | version "5.3.1" 67 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 68 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 69 | 70 | acorn@^7.1.1: 71 | version "7.4.1" 72 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 73 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 74 | 75 | ajv@^6.10.0, ajv@^6.10.2: 76 | version "6.12.6" 77 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 78 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 79 | dependencies: 80 | fast-deep-equal "^3.1.1" 81 | fast-json-stable-stringify "^2.0.0" 82 | json-schema-traverse "^0.4.1" 83 | uri-js "^4.2.2" 84 | 85 | ansi-escapes@^4.2.1: 86 | version "4.3.1" 87 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" 88 | integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== 89 | dependencies: 90 | type-fest "^0.11.0" 91 | 92 | ansi-regex@^4.1.0: 93 | version "4.1.1" 94 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" 95 | integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== 96 | 97 | ansi-regex@^5.0.0: 98 | version "5.0.0" 99 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 100 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 101 | 102 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 103 | version "3.2.1" 104 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 105 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 106 | dependencies: 107 | color-convert "^1.9.0" 108 | 109 | ansi-styles@^4.1.0: 110 | version "4.3.0" 111 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 112 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 113 | dependencies: 114 | color-convert "^2.0.1" 115 | 116 | argparse@^1.0.7: 117 | version "1.0.10" 118 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 119 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 120 | dependencies: 121 | sprintf-js "~1.0.2" 122 | 123 | argparse@^2.0.1: 124 | version "2.0.1" 125 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 126 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 127 | 128 | array-includes@^3.0.3, array-includes@^3.1.1: 129 | version "3.1.2" 130 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" 131 | integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== 132 | dependencies: 133 | call-bind "^1.0.0" 134 | define-properties "^1.1.3" 135 | es-abstract "^1.18.0-next.1" 136 | get-intrinsic "^1.0.1" 137 | is-string "^1.0.5" 138 | 139 | array-union@^2.1.0: 140 | version "2.1.0" 141 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 142 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 143 | 144 | asciimath-to-latex@^0.3.2: 145 | version "0.3.2" 146 | resolved "https://registry.yarnpkg.com/asciimath-to-latex/-/asciimath-to-latex-0.3.2.tgz#1f6e6b36ccc11e3de0ceeffa3dce16483ec28b4e" 147 | integrity sha1-H25rNszBHj3gzu/6Pc4WSD7Ci04= 148 | 149 | astral-regex@^1.0.0: 150 | version "1.0.0" 151 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 152 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 153 | 154 | balanced-match@^1.0.0: 155 | version "1.0.2" 156 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 157 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 158 | 159 | brace-expansion@^1.1.7: 160 | version "1.1.11" 161 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 162 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 163 | dependencies: 164 | balanced-match "^1.0.0" 165 | concat-map "0.0.1" 166 | 167 | braces@^3.0.1: 168 | version "3.0.2" 169 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 170 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 171 | dependencies: 172 | fill-range "^7.0.1" 173 | 174 | call-bind@^1.0.0: 175 | version "1.0.0" 176 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" 177 | integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== 178 | dependencies: 179 | function-bind "^1.1.1" 180 | get-intrinsic "^1.0.0" 181 | 182 | callsites@^3.0.0: 183 | version "3.1.0" 184 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 185 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 186 | 187 | camelcase@^5.0.0: 188 | version "5.3.1" 189 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 190 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 191 | 192 | chalk@^2.0.0, chalk@^2.1.0: 193 | version "2.4.2" 194 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 195 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 196 | dependencies: 197 | ansi-styles "^3.2.1" 198 | escape-string-regexp "^1.0.5" 199 | supports-color "^5.3.0" 200 | 201 | chalk@^4.1.0: 202 | version "4.1.0" 203 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 204 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 205 | dependencies: 206 | ansi-styles "^4.1.0" 207 | supports-color "^7.1.0" 208 | 209 | chardet@^0.7.0: 210 | version "0.7.0" 211 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 212 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 213 | 214 | cli-cursor@^3.1.0: 215 | version "3.1.0" 216 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" 217 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== 218 | dependencies: 219 | restore-cursor "^3.1.0" 220 | 221 | cli-width@^3.0.0: 222 | version "3.0.0" 223 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" 224 | integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== 225 | 226 | cliui@^5.0.0: 227 | version "5.0.0" 228 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 229 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 230 | dependencies: 231 | string-width "^3.1.0" 232 | strip-ansi "^5.2.0" 233 | wrap-ansi "^5.1.0" 234 | 235 | color-convert@^1.9.0: 236 | version "1.9.3" 237 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 238 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 239 | dependencies: 240 | color-name "1.1.3" 241 | 242 | color-convert@^2.0.1: 243 | version "2.0.1" 244 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 245 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 246 | dependencies: 247 | color-name "~1.1.4" 248 | 249 | color-name@1.1.3: 250 | version "1.1.3" 251 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 252 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 253 | 254 | color-name@~1.1.4: 255 | version "1.1.4" 256 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 257 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 258 | 259 | concat-map@0.0.1: 260 | version "0.0.1" 261 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 262 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 263 | 264 | contains-path@^0.1.0: 265 | version "0.1.0" 266 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" 267 | integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= 268 | 269 | cross-spawn@^6.0.5: 270 | version "6.0.5" 271 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 272 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 273 | dependencies: 274 | nice-try "^1.0.4" 275 | path-key "^2.0.1" 276 | semver "^5.5.0" 277 | shebang-command "^1.2.0" 278 | which "^1.2.9" 279 | 280 | debug-log@^1.0.0: 281 | version "1.0.1" 282 | resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" 283 | integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8= 284 | 285 | debug@^2.6.9: 286 | version "2.6.9" 287 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 288 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 289 | dependencies: 290 | ms "2.0.0" 291 | 292 | debug@^4.0.1: 293 | version "4.3.1" 294 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 295 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 296 | dependencies: 297 | ms "2.1.2" 298 | 299 | decamelize@^1.2.0: 300 | version "1.2.0" 301 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 302 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 303 | 304 | deep-is@~0.1.3: 305 | version "0.1.3" 306 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 307 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 308 | 309 | define-properties@^1.1.3: 310 | version "1.1.3" 311 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 312 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 313 | dependencies: 314 | object-keys "^1.0.12" 315 | 316 | deglob@^4.0.1: 317 | version "4.0.1" 318 | resolved "https://registry.yarnpkg.com/deglob/-/deglob-4.0.1.tgz#0685c6383992fd6009be10653a2b1116696fad55" 319 | integrity sha512-/g+RDZ7yf2HvoW+E5Cy+K94YhgcFgr6C8LuHZD1O5HoNPkf3KY6RfXJ0DBGlB/NkLi5gml+G9zqRzk9S0mHZCg== 320 | dependencies: 321 | find-root "^1.0.0" 322 | glob "^7.0.5" 323 | ignore "^5.0.0" 324 | pkg-config "^1.1.0" 325 | run-parallel "^1.1.2" 326 | uniq "^1.0.1" 327 | 328 | dir-glob@^3.0.1: 329 | version "3.0.1" 330 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 331 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 332 | dependencies: 333 | path-type "^4.0.0" 334 | 335 | doctrine@1.5.0: 336 | version "1.5.0" 337 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" 338 | integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= 339 | dependencies: 340 | esutils "^2.0.2" 341 | isarray "^1.0.0" 342 | 343 | doctrine@^2.1.0: 344 | version "2.1.0" 345 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 346 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 347 | dependencies: 348 | esutils "^2.0.2" 349 | 350 | doctrine@^3.0.0: 351 | version "3.0.0" 352 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 353 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 354 | dependencies: 355 | esutils "^2.0.2" 356 | 357 | emoji-regex@^7.0.1: 358 | version "7.0.3" 359 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 360 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 361 | 362 | emoji-regex@^8.0.0: 363 | version "8.0.0" 364 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 365 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 366 | 367 | entities@~2.1.0: 368 | version "2.1.0" 369 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" 370 | integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== 371 | 372 | error-ex@^1.2.0, error-ex@^1.3.1: 373 | version "1.3.2" 374 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 375 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 376 | dependencies: 377 | is-arrayish "^0.2.1" 378 | 379 | es-abstract@^1.18.0-next.1: 380 | version "1.18.0-next.1" 381 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" 382 | integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== 383 | dependencies: 384 | es-to-primitive "^1.2.1" 385 | function-bind "^1.1.1" 386 | has "^1.0.3" 387 | has-symbols "^1.0.1" 388 | is-callable "^1.2.2" 389 | is-negative-zero "^2.0.0" 390 | is-regex "^1.1.1" 391 | object-inspect "^1.8.0" 392 | object-keys "^1.1.1" 393 | object.assign "^4.1.1" 394 | string.prototype.trimend "^1.0.1" 395 | string.prototype.trimstart "^1.0.1" 396 | 397 | es-to-primitive@^1.2.1: 398 | version "1.2.1" 399 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 400 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 401 | dependencies: 402 | is-callable "^1.1.4" 403 | is-date-object "^1.0.1" 404 | is-symbol "^1.0.2" 405 | 406 | escape-string-regexp@^1.0.5: 407 | version "1.0.5" 408 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 409 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 410 | 411 | eslint-config-standard-jsx@8.1.0: 412 | version "8.1.0" 413 | resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-8.1.0.tgz#314c62a0e6f51f75547f89aade059bec140edfc7" 414 | integrity sha512-ULVC8qH8qCqbU792ZOO6DaiaZyHNS/5CZt3hKqHkEhVlhPEPN3nfBqqxJCyp59XrjIBZPu1chMYe9T2DXZ7TMw== 415 | 416 | eslint-config-standard@14.1.1: 417 | version "14.1.1" 418 | resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" 419 | integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== 420 | 421 | eslint-import-resolver-node@^0.3.2: 422 | version "0.3.4" 423 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" 424 | integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== 425 | dependencies: 426 | debug "^2.6.9" 427 | resolve "^1.13.1" 428 | 429 | eslint-module-utils@^2.4.0: 430 | version "2.6.0" 431 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" 432 | integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== 433 | dependencies: 434 | debug "^2.6.9" 435 | pkg-dir "^2.0.0" 436 | 437 | eslint-plugin-es@^2.0.0: 438 | version "2.0.0" 439 | resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" 440 | integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== 441 | dependencies: 442 | eslint-utils "^1.4.2" 443 | regexpp "^3.0.0" 444 | 445 | eslint-plugin-import@~2.18.0: 446 | version "2.18.2" 447 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" 448 | integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== 449 | dependencies: 450 | array-includes "^3.0.3" 451 | contains-path "^0.1.0" 452 | debug "^2.6.9" 453 | doctrine "1.5.0" 454 | eslint-import-resolver-node "^0.3.2" 455 | eslint-module-utils "^2.4.0" 456 | has "^1.0.3" 457 | minimatch "^3.0.4" 458 | object.values "^1.1.0" 459 | read-pkg-up "^2.0.0" 460 | resolve "^1.11.0" 461 | 462 | eslint-plugin-node@~10.0.0: 463 | version "10.0.0" 464 | resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" 465 | integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== 466 | dependencies: 467 | eslint-plugin-es "^2.0.0" 468 | eslint-utils "^1.4.2" 469 | ignore "^5.1.1" 470 | minimatch "^3.0.4" 471 | resolve "^1.10.1" 472 | semver "^6.1.0" 473 | 474 | eslint-plugin-promise@~4.2.1: 475 | version "4.2.1" 476 | resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" 477 | integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== 478 | 479 | eslint-plugin-react@~7.14.2: 480 | version "7.14.3" 481 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13" 482 | integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA== 483 | dependencies: 484 | array-includes "^3.0.3" 485 | doctrine "^2.1.0" 486 | has "^1.0.3" 487 | jsx-ast-utils "^2.1.0" 488 | object.entries "^1.1.0" 489 | object.fromentries "^2.0.0" 490 | object.values "^1.1.0" 491 | prop-types "^15.7.2" 492 | resolve "^1.10.1" 493 | 494 | eslint-plugin-standard@~4.0.0: 495 | version "4.0.2" 496 | resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.2.tgz#021211a9f077e63a6847e7bb9ab4247327ac8e0c" 497 | integrity sha512-nKptN8l7jksXkwFk++PhJB3cCDTcXOEyhISIN86Ue2feJ1LFyY3PrY3/xT2keXlJSY5bpmbiTG0f885/YKAvTA== 498 | 499 | eslint-scope@^5.0.0: 500 | version "5.1.1" 501 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 502 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 503 | dependencies: 504 | esrecurse "^4.3.0" 505 | estraverse "^4.1.1" 506 | 507 | eslint-utils@^1.4.2, eslint-utils@^1.4.3: 508 | version "1.4.3" 509 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" 510 | integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== 511 | dependencies: 512 | eslint-visitor-keys "^1.1.0" 513 | 514 | eslint-visitor-keys@^1.1.0: 515 | version "1.3.0" 516 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 517 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 518 | 519 | eslint@~6.8.0: 520 | version "6.8.0" 521 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" 522 | integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== 523 | dependencies: 524 | "@babel/code-frame" "^7.0.0" 525 | ajv "^6.10.0" 526 | chalk "^2.1.0" 527 | cross-spawn "^6.0.5" 528 | debug "^4.0.1" 529 | doctrine "^3.0.0" 530 | eslint-scope "^5.0.0" 531 | eslint-utils "^1.4.3" 532 | eslint-visitor-keys "^1.1.0" 533 | espree "^6.1.2" 534 | esquery "^1.0.1" 535 | esutils "^2.0.2" 536 | file-entry-cache "^5.0.1" 537 | functional-red-black-tree "^1.0.1" 538 | glob-parent "^5.0.0" 539 | globals "^12.1.0" 540 | ignore "^4.0.6" 541 | import-fresh "^3.0.0" 542 | imurmurhash "^0.1.4" 543 | inquirer "^7.0.0" 544 | is-glob "^4.0.0" 545 | js-yaml "^3.13.1" 546 | json-stable-stringify-without-jsonify "^1.0.1" 547 | levn "^0.3.0" 548 | lodash "^4.17.14" 549 | minimatch "^3.0.4" 550 | mkdirp "^0.5.1" 551 | natural-compare "^1.4.0" 552 | optionator "^0.8.3" 553 | progress "^2.0.0" 554 | regexpp "^2.0.1" 555 | semver "^6.1.2" 556 | strip-ansi "^5.2.0" 557 | strip-json-comments "^3.0.1" 558 | table "^5.2.3" 559 | text-table "^0.2.0" 560 | v8-compile-cache "^2.0.3" 561 | 562 | espree@^6.1.2: 563 | version "6.2.1" 564 | resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" 565 | integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== 566 | dependencies: 567 | acorn "^7.1.1" 568 | acorn-jsx "^5.2.0" 569 | eslint-visitor-keys "^1.1.0" 570 | 571 | esprima@^4.0.0: 572 | version "4.0.1" 573 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 574 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 575 | 576 | esquery@^1.0.1: 577 | version "1.3.1" 578 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" 579 | integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== 580 | dependencies: 581 | estraverse "^5.1.0" 582 | 583 | esrecurse@^4.3.0: 584 | version "4.3.0" 585 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 586 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 587 | dependencies: 588 | estraverse "^5.2.0" 589 | 590 | estraverse@^4.1.1: 591 | version "4.3.0" 592 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 593 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 594 | 595 | estraverse@^5.1.0, estraverse@^5.2.0: 596 | version "5.2.0" 597 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 598 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 599 | 600 | esutils@^2.0.2: 601 | version "2.0.3" 602 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 603 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 604 | 605 | external-editor@^3.0.3: 606 | version "3.1.0" 607 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" 608 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== 609 | dependencies: 610 | chardet "^0.7.0" 611 | iconv-lite "^0.4.24" 612 | tmp "^0.0.33" 613 | 614 | fast-deep-equal@^3.1.1: 615 | version "3.1.3" 616 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 617 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 618 | 619 | fast-glob@^3.0.3: 620 | version "3.2.4" 621 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" 622 | integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== 623 | dependencies: 624 | "@nodelib/fs.stat" "^2.0.2" 625 | "@nodelib/fs.walk" "^1.2.3" 626 | glob-parent "^5.1.0" 627 | merge2 "^1.3.0" 628 | micromatch "^4.0.2" 629 | picomatch "^2.2.1" 630 | 631 | fast-json-stable-stringify@^2.0.0: 632 | version "2.1.0" 633 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 634 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 635 | 636 | fast-levenshtein@~2.0.6: 637 | version "2.0.6" 638 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 639 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 640 | 641 | fastq@^1.6.0: 642 | version "1.10.0" 643 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" 644 | integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== 645 | dependencies: 646 | reusify "^1.0.4" 647 | 648 | figures@^3.0.0: 649 | version "3.2.0" 650 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" 651 | integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== 652 | dependencies: 653 | escape-string-regexp "^1.0.5" 654 | 655 | file-entry-cache@^5.0.1: 656 | version "5.0.1" 657 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 658 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 659 | dependencies: 660 | flat-cache "^2.0.1" 661 | 662 | fill-range@^7.0.1: 663 | version "7.0.1" 664 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 665 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 666 | dependencies: 667 | to-regex-range "^5.0.1" 668 | 669 | find-root@^1.0.0: 670 | version "1.1.0" 671 | resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" 672 | integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== 673 | 674 | find-up@^2.0.0, find-up@^2.1.0: 675 | version "2.1.0" 676 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 677 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 678 | dependencies: 679 | locate-path "^2.0.0" 680 | 681 | find-up@^3.0.0: 682 | version "3.0.0" 683 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 684 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 685 | dependencies: 686 | locate-path "^3.0.0" 687 | 688 | flat-cache@^2.0.1: 689 | version "2.0.1" 690 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 691 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 692 | dependencies: 693 | flatted "^2.0.0" 694 | rimraf "2.6.3" 695 | write "1.0.3" 696 | 697 | flatted@^2.0.0: 698 | version "2.0.2" 699 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" 700 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== 701 | 702 | fs.realpath@^1.0.0: 703 | version "1.0.0" 704 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 705 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 706 | 707 | function-bind@^1.1.1: 708 | version "1.1.1" 709 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 710 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 711 | 712 | functional-red-black-tree@^1.0.1: 713 | version "1.0.1" 714 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 715 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 716 | 717 | get-caller-file@^2.0.1: 718 | version "2.0.5" 719 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 720 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 721 | 722 | get-intrinsic@^1.0.0, get-intrinsic@^1.0.1: 723 | version "1.0.2" 724 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" 725 | integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== 726 | dependencies: 727 | function-bind "^1.1.1" 728 | has "^1.0.3" 729 | has-symbols "^1.0.1" 730 | 731 | get-stdin@^7.0.0: 732 | version "7.0.0" 733 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" 734 | integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== 735 | 736 | glob-parent@^5.0.0, glob-parent@^5.1.0: 737 | version "5.1.2" 738 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 739 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 740 | dependencies: 741 | is-glob "^4.0.1" 742 | 743 | glob@^7.0.5, glob@^7.1.3, glob@^7.1.6: 744 | version "7.1.6" 745 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 746 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 747 | dependencies: 748 | fs.realpath "^1.0.0" 749 | inflight "^1.0.4" 750 | inherits "2" 751 | minimatch "^3.0.4" 752 | once "^1.3.0" 753 | path-is-absolute "^1.0.0" 754 | 755 | globals@^12.1.0: 756 | version "12.4.0" 757 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" 758 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 759 | dependencies: 760 | type-fest "^0.8.1" 761 | 762 | globby@^10.0.1: 763 | version "10.0.2" 764 | resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" 765 | integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== 766 | dependencies: 767 | "@types/glob" "^7.1.1" 768 | array-union "^2.1.0" 769 | dir-glob "^3.0.1" 770 | fast-glob "^3.0.3" 771 | glob "^7.1.3" 772 | ignore "^5.1.1" 773 | merge2 "^1.2.3" 774 | slash "^3.0.0" 775 | 776 | graceful-fs@^4.1.15, graceful-fs@^4.1.2: 777 | version "4.2.4" 778 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 779 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 780 | 781 | has-flag@^3.0.0: 782 | version "3.0.0" 783 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 784 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 785 | 786 | has-flag@^4.0.0: 787 | version "4.0.0" 788 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 789 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 790 | 791 | has-symbols@^1.0.1: 792 | version "1.0.1" 793 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 794 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 795 | 796 | has@^1.0.3: 797 | version "1.0.3" 798 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 799 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 800 | dependencies: 801 | function-bind "^1.1.1" 802 | 803 | highlight.js@^10.4.1: 804 | version "10.5.0" 805 | resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.5.0.tgz#3f09fede6a865757378f2d9ebdcbc15ba268f98f" 806 | integrity sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw== 807 | 808 | hosted-git-info@^2.1.4: 809 | version "2.8.9" 810 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" 811 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 812 | 813 | iconv-lite@^0.4.24: 814 | version "0.4.24" 815 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 816 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 817 | dependencies: 818 | safer-buffer ">= 2.1.2 < 3" 819 | 820 | ignore@^4.0.6: 821 | version "4.0.6" 822 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 823 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 824 | 825 | ignore@^5.0.0, ignore@^5.1.1: 826 | version "5.1.8" 827 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 828 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 829 | 830 | import-fresh@^3.0.0: 831 | version "3.3.0" 832 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 833 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 834 | dependencies: 835 | parent-module "^1.0.0" 836 | resolve-from "^4.0.0" 837 | 838 | imurmurhash@^0.1.4: 839 | version "0.1.4" 840 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 841 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 842 | 843 | inflight@^1.0.4: 844 | version "1.0.6" 845 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 846 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 847 | dependencies: 848 | once "^1.3.0" 849 | wrappy "1" 850 | 851 | inherits@2: 852 | version "2.0.4" 853 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 854 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 855 | 856 | inquirer@^7.0.0: 857 | version "7.3.3" 858 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" 859 | integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== 860 | dependencies: 861 | ansi-escapes "^4.2.1" 862 | chalk "^4.1.0" 863 | cli-cursor "^3.1.0" 864 | cli-width "^3.0.0" 865 | external-editor "^3.0.3" 866 | figures "^3.0.0" 867 | lodash "^4.17.19" 868 | mute-stream "0.0.8" 869 | run-async "^2.4.0" 870 | rxjs "^6.6.0" 871 | string-width "^4.1.0" 872 | strip-ansi "^6.0.0" 873 | through "^2.3.6" 874 | 875 | is-arrayish@^0.2.1: 876 | version "0.2.1" 877 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 878 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 879 | 880 | is-callable@^1.1.4, is-callable@^1.2.2: 881 | version "1.2.2" 882 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" 883 | integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== 884 | 885 | is-core-module@^2.1.0: 886 | version "2.2.0" 887 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" 888 | integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== 889 | dependencies: 890 | has "^1.0.3" 891 | 892 | is-date-object@^1.0.1: 893 | version "1.0.2" 894 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 895 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 896 | 897 | is-extglob@^2.1.1: 898 | version "2.1.1" 899 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 900 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 901 | 902 | is-fullwidth-code-point@^2.0.0: 903 | version "2.0.0" 904 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 905 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 906 | 907 | is-fullwidth-code-point@^3.0.0: 908 | version "3.0.0" 909 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 910 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 911 | 912 | is-glob@^4.0.0, is-glob@^4.0.1: 913 | version "4.0.1" 914 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 915 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 916 | dependencies: 917 | is-extglob "^2.1.1" 918 | 919 | is-negative-zero@^2.0.0: 920 | version "2.0.1" 921 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" 922 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== 923 | 924 | is-number@^7.0.0: 925 | version "7.0.0" 926 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 927 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 928 | 929 | is-regex@^1.1.1: 930 | version "1.1.1" 931 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" 932 | integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== 933 | dependencies: 934 | has-symbols "^1.0.1" 935 | 936 | is-string@^1.0.5: 937 | version "1.0.5" 938 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" 939 | integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== 940 | 941 | is-symbol@^1.0.2: 942 | version "1.0.3" 943 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 944 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 945 | dependencies: 946 | has-symbols "^1.0.1" 947 | 948 | isarray@^1.0.0: 949 | version "1.0.0" 950 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 951 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 952 | 953 | isexe@^2.0.0: 954 | version "2.0.0" 955 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 956 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 957 | 958 | jasmine-core@~3.6.0: 959 | version "3.6.0" 960 | resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" 961 | integrity sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw== 962 | 963 | jasmine@^3.5.0: 964 | version "3.6.3" 965 | resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.6.3.tgz#520cd71f76bd8251e9f566b622e13602e9ddcf26" 966 | integrity sha512-Th91zHsbsALWjDUIiU5d/W5zaYQsZFMPTdeNmi8GivZPmAaUAK8MblSG3yQI4VMGC/abF2us7ex60NH1AAIMTA== 967 | dependencies: 968 | glob "^7.1.6" 969 | jasmine-core "~3.6.0" 970 | 971 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 972 | version "4.0.0" 973 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 974 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 975 | 976 | js-yaml@^3.13.1: 977 | version "3.14.1" 978 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 979 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 980 | dependencies: 981 | argparse "^1.0.7" 982 | esprima "^4.0.0" 983 | 984 | json-parse-better-errors@^1.0.1: 985 | version "1.0.2" 986 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 987 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 988 | 989 | json-schema-traverse@^0.4.1: 990 | version "0.4.1" 991 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 992 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 993 | 994 | json-stable-stringify-without-jsonify@^1.0.1: 995 | version "1.0.1" 996 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 997 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 998 | 999 | jsx-ast-utils@^2.1.0: 1000 | version "2.4.1" 1001 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" 1002 | integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== 1003 | dependencies: 1004 | array-includes "^3.1.1" 1005 | object.assign "^4.1.0" 1006 | 1007 | katex@^0.9.0-alpha2: 1008 | version "0.9.0" 1009 | resolved "https://registry.yarnpkg.com/katex/-/katex-0.9.0.tgz#26a7d082c21d53725422d2d71da9b2d8455fbd4a" 1010 | integrity sha512-lp3x90LT1tDZBW2tjLheJ98wmRMRjUHwk4QpaswT9bhqoQZ+XA4cPcjcQBxgOQNwaOSt6ZeL/a6GKQ1of3LFxQ== 1011 | dependencies: 1012 | match-at "^0.1.1" 1013 | 1014 | levn@^0.3.0, levn@~0.3.0: 1015 | version "0.3.0" 1016 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1017 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1018 | dependencies: 1019 | prelude-ls "~1.1.2" 1020 | type-check "~0.3.2" 1021 | 1022 | linkify-it@^3.0.1: 1023 | version "3.0.3" 1024 | resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" 1025 | integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== 1026 | dependencies: 1027 | uc.micro "^1.0.1" 1028 | 1029 | load-json-file@^2.0.0: 1030 | version "2.0.0" 1031 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" 1032 | integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= 1033 | dependencies: 1034 | graceful-fs "^4.1.2" 1035 | parse-json "^2.2.0" 1036 | pify "^2.0.0" 1037 | strip-bom "^3.0.0" 1038 | 1039 | load-json-file@^5.2.0: 1040 | version "5.3.0" 1041 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" 1042 | integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== 1043 | dependencies: 1044 | graceful-fs "^4.1.15" 1045 | parse-json "^4.0.0" 1046 | pify "^4.0.1" 1047 | strip-bom "^3.0.0" 1048 | type-fest "^0.3.0" 1049 | 1050 | locate-path@^2.0.0: 1051 | version "2.0.0" 1052 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1053 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 1054 | dependencies: 1055 | p-locate "^2.0.0" 1056 | path-exists "^3.0.0" 1057 | 1058 | locate-path@^3.0.0: 1059 | version "3.0.0" 1060 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1061 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1062 | dependencies: 1063 | p-locate "^3.0.0" 1064 | path-exists "^3.0.0" 1065 | 1066 | lodash.deburr@^4.0.0: 1067 | version "4.1.0" 1068 | resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-4.1.0.tgz#ddb1bbb3ef07458c0177ba07de14422cb033ff9b" 1069 | integrity sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s= 1070 | 1071 | lodash.kebabcase@4.0.1: 1072 | version "4.0.1" 1073 | resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.0.1.tgz#5e63bc9aa2a5562ff3b97ca7af2f803de1bcb90e" 1074 | integrity sha1-XmO8mqKlVi/zuXynry+APeG8uQ4= 1075 | dependencies: 1076 | lodash.deburr "^4.0.0" 1077 | lodash.words "^4.0.0" 1078 | 1079 | lodash.words@^4.0.0: 1080 | version "4.2.0" 1081 | resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-4.2.0.tgz#5ecfeaf8ecf8acaa8e0c8386295f1993c9cf4036" 1082 | integrity sha1-Xs/q+Oz4rKqODIOGKV8Zk8nPQDY= 1083 | 1084 | lodash@^4.17.14, lodash@^4.17.19: 1085 | version "4.17.21" 1086 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1087 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1088 | 1089 | loose-envify@^1.4.0: 1090 | version "1.4.0" 1091 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1092 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1093 | dependencies: 1094 | js-tokens "^3.0.0 || ^4.0.0" 1095 | 1096 | markdown-it-latex@^0.2.0: 1097 | version "0.2.0" 1098 | resolved "https://registry.yarnpkg.com/markdown-it-latex/-/markdown-it-latex-0.2.0.tgz#b7421ddb8ecfdb65f4428b50691c1308e18ab2f0" 1099 | integrity sha512-vCaS6Dws9faA8lZel7Slfa1IYEnbYOjHzian/tDBulONBS+f9vRkFfQ4S0eFnTGtDTTXqE7zAnoezkv18b9IIA== 1100 | dependencies: 1101 | asciimath-to-latex "^0.3.2" 1102 | katex "^0.9.0-alpha2" 1103 | 1104 | markdown-it-named-headings@^1.1.0: 1105 | version "1.1.0" 1106 | resolved "https://registry.yarnpkg.com/markdown-it-named-headings/-/markdown-it-named-headings-1.1.0.tgz#2f6cd29800de1e9dde0a24e8d4d1275df42ea17d" 1107 | integrity sha1-L2zSmADeHp3eCiTo1NEnXfQuoX0= 1108 | dependencies: 1109 | lodash.kebabcase "4.0.1" 1110 | unidecode "^0.1.8" 1111 | 1112 | markdown-it@^12.3.2: 1113 | version "12.3.2" 1114 | resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" 1115 | integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== 1116 | dependencies: 1117 | argparse "^2.0.1" 1118 | entities "~2.1.0" 1119 | linkify-it "^3.0.1" 1120 | mdurl "^1.0.1" 1121 | uc.micro "^1.0.5" 1122 | 1123 | match-at@^0.1.1: 1124 | version "0.1.1" 1125 | resolved "https://registry.yarnpkg.com/match-at/-/match-at-0.1.1.tgz#25d040d291777704d5e6556bbb79230ec2de0540" 1126 | integrity sha512-h4Yd392z9mST+dzc+yjuybOGFNOZjmXIPKWjxBd1Bb23r4SmDOsk2NYCU2BMUBGbSpZqwVsZYNq26QS3xfaT3Q== 1127 | 1128 | mdurl@^1.0.1: 1129 | version "1.0.1" 1130 | resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" 1131 | integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= 1132 | 1133 | merge2@^1.2.3, merge2@^1.3.0: 1134 | version "1.4.1" 1135 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1136 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1137 | 1138 | micromatch@^4.0.2: 1139 | version "4.0.2" 1140 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" 1141 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 1142 | dependencies: 1143 | braces "^3.0.1" 1144 | picomatch "^2.0.5" 1145 | 1146 | mimic-fn@^2.1.0: 1147 | version "2.1.0" 1148 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1149 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1150 | 1151 | minimatch@^3.0.4: 1152 | version "3.1.2" 1153 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1154 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1155 | dependencies: 1156 | brace-expansion "^1.1.7" 1157 | 1158 | minimist@^1.2.5: 1159 | version "1.2.6" 1160 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 1161 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 1162 | 1163 | mkdirp@^0.5.1: 1164 | version "0.5.5" 1165 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1166 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1167 | dependencies: 1168 | minimist "^1.2.5" 1169 | 1170 | ms@2.0.0: 1171 | version "2.0.0" 1172 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1173 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1174 | 1175 | ms@2.1.2: 1176 | version "2.1.2" 1177 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1178 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1179 | 1180 | mute-stream@0.0.8: 1181 | version "0.0.8" 1182 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" 1183 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== 1184 | 1185 | natural-compare@^1.4.0: 1186 | version "1.4.0" 1187 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1188 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1189 | 1190 | nice-try@^1.0.4: 1191 | version "1.0.5" 1192 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1193 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1194 | 1195 | normalize-package-data@^2.3.2: 1196 | version "2.5.0" 1197 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1198 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1199 | dependencies: 1200 | hosted-git-info "^2.1.4" 1201 | resolve "^1.10.0" 1202 | semver "2 || 3 || 4 || 5" 1203 | validate-npm-package-license "^3.0.1" 1204 | 1205 | object-assign@^4.1.1: 1206 | version "4.1.1" 1207 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1208 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1209 | 1210 | object-inspect@^1.8.0: 1211 | version "1.9.0" 1212 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" 1213 | integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== 1214 | 1215 | object-keys@^1.0.12, object-keys@^1.1.1: 1216 | version "1.1.1" 1217 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1218 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1219 | 1220 | object.assign@^4.1.0, object.assign@^4.1.1: 1221 | version "4.1.2" 1222 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 1223 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 1224 | dependencies: 1225 | call-bind "^1.0.0" 1226 | define-properties "^1.1.3" 1227 | has-symbols "^1.0.1" 1228 | object-keys "^1.1.1" 1229 | 1230 | object.entries@^1.1.0: 1231 | version "1.1.3" 1232 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" 1233 | integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== 1234 | dependencies: 1235 | call-bind "^1.0.0" 1236 | define-properties "^1.1.3" 1237 | es-abstract "^1.18.0-next.1" 1238 | has "^1.0.3" 1239 | 1240 | object.fromentries@^2.0.0: 1241 | version "2.0.3" 1242 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072" 1243 | integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== 1244 | dependencies: 1245 | call-bind "^1.0.0" 1246 | define-properties "^1.1.3" 1247 | es-abstract "^1.18.0-next.1" 1248 | has "^1.0.3" 1249 | 1250 | object.values@^1.1.0: 1251 | version "1.1.2" 1252 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" 1253 | integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== 1254 | dependencies: 1255 | call-bind "^1.0.0" 1256 | define-properties "^1.1.3" 1257 | es-abstract "^1.18.0-next.1" 1258 | has "^1.0.3" 1259 | 1260 | once@^1.3.0: 1261 | version "1.4.0" 1262 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1263 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1264 | dependencies: 1265 | wrappy "1" 1266 | 1267 | onetime@^5.1.0: 1268 | version "5.1.2" 1269 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1270 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1271 | dependencies: 1272 | mimic-fn "^2.1.0" 1273 | 1274 | optionator@^0.8.3: 1275 | version "0.8.3" 1276 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 1277 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 1278 | dependencies: 1279 | deep-is "~0.1.3" 1280 | fast-levenshtein "~2.0.6" 1281 | levn "~0.3.0" 1282 | prelude-ls "~1.1.2" 1283 | type-check "~0.3.2" 1284 | word-wrap "~1.2.3" 1285 | 1286 | os-tmpdir@~1.0.2: 1287 | version "1.0.2" 1288 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1289 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1290 | 1291 | p-limit@^1.1.0: 1292 | version "1.3.0" 1293 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 1294 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 1295 | dependencies: 1296 | p-try "^1.0.0" 1297 | 1298 | p-limit@^2.0.0: 1299 | version "2.3.0" 1300 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1301 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1302 | dependencies: 1303 | p-try "^2.0.0" 1304 | 1305 | p-locate@^2.0.0: 1306 | version "2.0.0" 1307 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1308 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 1309 | dependencies: 1310 | p-limit "^1.1.0" 1311 | 1312 | p-locate@^3.0.0: 1313 | version "3.0.0" 1314 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1315 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1316 | dependencies: 1317 | p-limit "^2.0.0" 1318 | 1319 | p-try@^1.0.0: 1320 | version "1.0.0" 1321 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 1322 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 1323 | 1324 | p-try@^2.0.0: 1325 | version "2.2.0" 1326 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1327 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1328 | 1329 | parent-module@^1.0.0: 1330 | version "1.0.1" 1331 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1332 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1333 | dependencies: 1334 | callsites "^3.0.0" 1335 | 1336 | parse-json@^2.2.0: 1337 | version "2.2.0" 1338 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1339 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= 1340 | dependencies: 1341 | error-ex "^1.2.0" 1342 | 1343 | parse-json@^4.0.0: 1344 | version "4.0.0" 1345 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1346 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 1347 | dependencies: 1348 | error-ex "^1.3.1" 1349 | json-parse-better-errors "^1.0.1" 1350 | 1351 | path-exists@^3.0.0: 1352 | version "3.0.0" 1353 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1354 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1355 | 1356 | path-is-absolute@^1.0.0: 1357 | version "1.0.1" 1358 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1359 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1360 | 1361 | path-key@^2.0.1: 1362 | version "2.0.1" 1363 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1364 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1365 | 1366 | path-parse@^1.0.6: 1367 | version "1.0.7" 1368 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1369 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1370 | 1371 | path-type@^2.0.0: 1372 | version "2.0.0" 1373 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" 1374 | integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= 1375 | dependencies: 1376 | pify "^2.0.0" 1377 | 1378 | path-type@^4.0.0: 1379 | version "4.0.0" 1380 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1381 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1382 | 1383 | picomatch@^2.0.5, picomatch@^2.2.1: 1384 | version "2.2.2" 1385 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 1386 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 1387 | 1388 | pify@^2.0.0: 1389 | version "2.3.0" 1390 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1391 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 1392 | 1393 | pify@^4.0.1: 1394 | version "4.0.1" 1395 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 1396 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 1397 | 1398 | pkg-conf@^3.1.0: 1399 | version "3.1.0" 1400 | resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae" 1401 | integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== 1402 | dependencies: 1403 | find-up "^3.0.0" 1404 | load-json-file "^5.2.0" 1405 | 1406 | pkg-config@^1.1.0: 1407 | version "1.1.1" 1408 | resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" 1409 | integrity sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q= 1410 | dependencies: 1411 | debug-log "^1.0.0" 1412 | find-root "^1.0.0" 1413 | xtend "^4.0.1" 1414 | 1415 | pkg-dir@^2.0.0: 1416 | version "2.0.0" 1417 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" 1418 | integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= 1419 | dependencies: 1420 | find-up "^2.1.0" 1421 | 1422 | prelude-ls@~1.1.2: 1423 | version "1.1.2" 1424 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1425 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1426 | 1427 | prettier@^1.18.2: 1428 | version "1.19.1" 1429 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" 1430 | integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== 1431 | 1432 | progress@^2.0.0: 1433 | version "2.0.3" 1434 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1435 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1436 | 1437 | prop-types@^15.7.2: 1438 | version "15.7.2" 1439 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 1440 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 1441 | dependencies: 1442 | loose-envify "^1.4.0" 1443 | object-assign "^4.1.1" 1444 | react-is "^16.8.1" 1445 | 1446 | punycode@^2.1.0: 1447 | version "2.1.1" 1448 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1449 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1450 | 1451 | react-is@^16.8.1: 1452 | version "16.13.1" 1453 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 1454 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 1455 | 1456 | read-pkg-up@^2.0.0: 1457 | version "2.0.0" 1458 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" 1459 | integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= 1460 | dependencies: 1461 | find-up "^2.0.0" 1462 | read-pkg "^2.0.0" 1463 | 1464 | read-pkg@^2.0.0: 1465 | version "2.0.0" 1466 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" 1467 | integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= 1468 | dependencies: 1469 | load-json-file "^2.0.0" 1470 | normalize-package-data "^2.3.2" 1471 | path-type "^2.0.0" 1472 | 1473 | regexpp@^2.0.1: 1474 | version "2.0.1" 1475 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 1476 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 1477 | 1478 | regexpp@^3.0.0: 1479 | version "3.1.0" 1480 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" 1481 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 1482 | 1483 | remove-markdown@^0.3.0: 1484 | version "0.3.0" 1485 | resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.3.0.tgz#5e4b667493a93579728f3d52ecc1db9ca505dc98" 1486 | integrity sha1-XktmdJOpNXlyjz1S7MHbnKUF3Jg= 1487 | 1488 | require-directory@^2.1.1: 1489 | version "2.1.1" 1490 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1491 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1492 | 1493 | require-main-filename@^2.0.0: 1494 | version "2.0.0" 1495 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1496 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1497 | 1498 | resolve-from@^4.0.0: 1499 | version "4.0.0" 1500 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1501 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1502 | 1503 | resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.13.1: 1504 | version "1.19.0" 1505 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" 1506 | integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== 1507 | dependencies: 1508 | is-core-module "^2.1.0" 1509 | path-parse "^1.0.6" 1510 | 1511 | restore-cursor@^3.1.0: 1512 | version "3.1.0" 1513 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" 1514 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== 1515 | dependencies: 1516 | onetime "^5.1.0" 1517 | signal-exit "^3.0.2" 1518 | 1519 | reusify@^1.0.4: 1520 | version "1.0.4" 1521 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1522 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1523 | 1524 | rimraf@2.6.3: 1525 | version "2.6.3" 1526 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1527 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1528 | dependencies: 1529 | glob "^7.1.3" 1530 | 1531 | run-async@^2.4.0: 1532 | version "2.4.1" 1533 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" 1534 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== 1535 | 1536 | run-parallel@^1.1.2, run-parallel@^1.1.9: 1537 | version "1.1.10" 1538 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" 1539 | integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== 1540 | 1541 | rxjs@^6.6.0: 1542 | version "6.6.3" 1543 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" 1544 | integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== 1545 | dependencies: 1546 | tslib "^1.9.0" 1547 | 1548 | "safer-buffer@>= 2.1.2 < 3": 1549 | version "2.1.2" 1550 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1551 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1552 | 1553 | "semver@2 || 3 || 4 || 5", semver@^5.5.0: 1554 | version "5.7.1" 1555 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1556 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1557 | 1558 | semver@^6.1.0, semver@^6.1.2: 1559 | version "6.3.0" 1560 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1561 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1562 | 1563 | set-blocking@^2.0.0: 1564 | version "2.0.0" 1565 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1566 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1567 | 1568 | shebang-command@^1.2.0: 1569 | version "1.2.0" 1570 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1571 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1572 | dependencies: 1573 | shebang-regex "^1.0.0" 1574 | 1575 | shebang-regex@^1.0.0: 1576 | version "1.0.0" 1577 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1578 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1579 | 1580 | signal-exit@^3.0.2: 1581 | version "3.0.3" 1582 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1583 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1584 | 1585 | slash@^3.0.0: 1586 | version "3.0.0" 1587 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1588 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1589 | 1590 | slice-ansi@^2.1.0: 1591 | version "2.1.0" 1592 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 1593 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 1594 | dependencies: 1595 | ansi-styles "^3.2.0" 1596 | astral-regex "^1.0.0" 1597 | is-fullwidth-code-point "^2.0.0" 1598 | 1599 | spdx-correct@^3.0.0: 1600 | version "3.1.1" 1601 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 1602 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 1603 | dependencies: 1604 | spdx-expression-parse "^3.0.0" 1605 | spdx-license-ids "^3.0.0" 1606 | 1607 | spdx-exceptions@^2.1.0: 1608 | version "2.3.0" 1609 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 1610 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 1611 | 1612 | spdx-expression-parse@^3.0.0: 1613 | version "3.0.1" 1614 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 1615 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 1616 | dependencies: 1617 | spdx-exceptions "^2.1.0" 1618 | spdx-license-ids "^3.0.0" 1619 | 1620 | spdx-license-ids@^3.0.0: 1621 | version "3.0.7" 1622 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" 1623 | integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== 1624 | 1625 | sprintf-js@~1.0.2: 1626 | version "1.0.3" 1627 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1628 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1629 | 1630 | standard-engine@^12.0.0: 1631 | version "12.1.0" 1632 | resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-12.1.0.tgz#b13dbae583de54c06805207b991ef48a582c0e62" 1633 | integrity sha512-DVJnWM1CGkag4ucFLGdiYWa5/kJURPONmMmk17p8FT5NE4UnPZB1vxWnXnRo2sPSL78pWJG8xEM+1Tu19z0deg== 1634 | dependencies: 1635 | deglob "^4.0.1" 1636 | get-stdin "^7.0.0" 1637 | minimist "^1.2.5" 1638 | pkg-conf "^3.1.0" 1639 | 1640 | standard@^14.3.1: 1641 | version "14.3.4" 1642 | resolved "https://registry.yarnpkg.com/standard/-/standard-14.3.4.tgz#748e80e8cd7b535844a85a12f337755a7e3a0f6e" 1643 | integrity sha512-+lpOkFssMkljJ6eaILmqxHQ2n4csuEABmcubLTb9almFi1ElDzXb1819fjf/5ygSyePCq4kU2wMdb2fBfb9P9Q== 1644 | dependencies: 1645 | eslint "~6.8.0" 1646 | eslint-config-standard "14.1.1" 1647 | eslint-config-standard-jsx "8.1.0" 1648 | eslint-plugin-import "~2.18.0" 1649 | eslint-plugin-node "~10.0.0" 1650 | eslint-plugin-promise "~4.2.1" 1651 | eslint-plugin-react "~7.14.2" 1652 | eslint-plugin-standard "~4.0.0" 1653 | standard-engine "^12.0.0" 1654 | 1655 | string-width@^3.0.0, string-width@^3.1.0: 1656 | version "3.1.0" 1657 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1658 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1659 | dependencies: 1660 | emoji-regex "^7.0.1" 1661 | is-fullwidth-code-point "^2.0.0" 1662 | strip-ansi "^5.1.0" 1663 | 1664 | string-width@^4.1.0: 1665 | version "4.2.0" 1666 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 1667 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== 1668 | dependencies: 1669 | emoji-regex "^8.0.0" 1670 | is-fullwidth-code-point "^3.0.0" 1671 | strip-ansi "^6.0.0" 1672 | 1673 | string.prototype.trimend@^1.0.1: 1674 | version "1.0.3" 1675 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" 1676 | integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== 1677 | dependencies: 1678 | call-bind "^1.0.0" 1679 | define-properties "^1.1.3" 1680 | 1681 | string.prototype.trimstart@^1.0.1: 1682 | version "1.0.3" 1683 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" 1684 | integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== 1685 | dependencies: 1686 | call-bind "^1.0.0" 1687 | define-properties "^1.1.3" 1688 | 1689 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1690 | version "5.2.0" 1691 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1692 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1693 | dependencies: 1694 | ansi-regex "^4.1.0" 1695 | 1696 | strip-ansi@^6.0.0: 1697 | version "6.0.0" 1698 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1699 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1700 | dependencies: 1701 | ansi-regex "^5.0.0" 1702 | 1703 | strip-bom@^3.0.0: 1704 | version "3.0.0" 1705 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1706 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 1707 | 1708 | strip-json-comments@^3.0.1: 1709 | version "3.1.1" 1710 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1711 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1712 | 1713 | supports-color@^5.3.0: 1714 | version "5.5.0" 1715 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1716 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1717 | dependencies: 1718 | has-flag "^3.0.0" 1719 | 1720 | supports-color@^7.1.0: 1721 | version "7.2.0" 1722 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1723 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1724 | dependencies: 1725 | has-flag "^4.0.0" 1726 | 1727 | table@^5.2.3: 1728 | version "5.4.6" 1729 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" 1730 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 1731 | dependencies: 1732 | ajv "^6.10.2" 1733 | lodash "^4.17.14" 1734 | slice-ansi "^2.1.0" 1735 | string-width "^3.0.0" 1736 | 1737 | text-table@^0.2.0: 1738 | version "0.2.0" 1739 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1740 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1741 | 1742 | through@^2.3.6: 1743 | version "2.3.8" 1744 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1745 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1746 | 1747 | tmp@^0.0.33: 1748 | version "0.0.33" 1749 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1750 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 1751 | dependencies: 1752 | os-tmpdir "~1.0.2" 1753 | 1754 | to-regex-range@^5.0.1: 1755 | version "5.0.1" 1756 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1757 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1758 | dependencies: 1759 | is-number "^7.0.0" 1760 | 1761 | tslib@^1.9.0: 1762 | version "1.14.1" 1763 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1764 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1765 | 1766 | type-check@~0.3.2: 1767 | version "0.3.2" 1768 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1769 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1770 | dependencies: 1771 | prelude-ls "~1.1.2" 1772 | 1773 | type-fest@^0.11.0: 1774 | version "0.11.0" 1775 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" 1776 | integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== 1777 | 1778 | type-fest@^0.3.0: 1779 | version "0.3.1" 1780 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" 1781 | integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== 1782 | 1783 | type-fest@^0.8.1: 1784 | version "0.8.1" 1785 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1786 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1787 | 1788 | uc.micro@^1.0.1, uc.micro@^1.0.5: 1789 | version "1.0.6" 1790 | resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" 1791 | integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== 1792 | 1793 | unidecode@^0.1.8: 1794 | version "0.1.8" 1795 | resolved "https://registry.yarnpkg.com/unidecode/-/unidecode-0.1.8.tgz#efbb301538bc45246a9ac8c559d72f015305053e" 1796 | integrity sha1-77swFTi8RSRqmsjFWdcvAVMFBT4= 1797 | 1798 | uniq@^1.0.1: 1799 | version "1.0.1" 1800 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" 1801 | integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= 1802 | 1803 | uri-js@^4.2.2: 1804 | version "4.4.0" 1805 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" 1806 | integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== 1807 | dependencies: 1808 | punycode "^2.1.0" 1809 | 1810 | v8-compile-cache@^2.0.3: 1811 | version "2.2.0" 1812 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" 1813 | integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== 1814 | 1815 | validate-npm-package-license@^3.0.1: 1816 | version "3.0.4" 1817 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 1818 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1819 | dependencies: 1820 | spdx-correct "^3.0.0" 1821 | spdx-expression-parse "^3.0.0" 1822 | 1823 | which-module@^2.0.0: 1824 | version "2.0.0" 1825 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1826 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1827 | 1828 | which@^1.2.9: 1829 | version "1.3.1" 1830 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1831 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1832 | dependencies: 1833 | isexe "^2.0.0" 1834 | 1835 | word-wrap@~1.2.3: 1836 | version "1.2.3" 1837 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1838 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1839 | 1840 | wrap-ansi@^5.1.0: 1841 | version "5.1.0" 1842 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 1843 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 1844 | dependencies: 1845 | ansi-styles "^3.2.0" 1846 | string-width "^3.0.0" 1847 | strip-ansi "^5.0.0" 1848 | 1849 | wrappy@1: 1850 | version "1.0.2" 1851 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1852 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1853 | 1854 | write@1.0.3: 1855 | version "1.0.3" 1856 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 1857 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 1858 | dependencies: 1859 | mkdirp "^0.5.1" 1860 | 1861 | xtend@^4.0.1: 1862 | version "4.0.2" 1863 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 1864 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 1865 | 1866 | y18n@^4.0.0: 1867 | version "4.0.1" 1868 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" 1869 | integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== 1870 | 1871 | yargs-parser@^15.0.1: 1872 | version "15.0.1" 1873 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" 1874 | integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== 1875 | dependencies: 1876 | camelcase "^5.0.0" 1877 | decamelize "^1.2.0" 1878 | 1879 | yargs@^14.2.0: 1880 | version "14.2.3" 1881 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" 1882 | integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== 1883 | dependencies: 1884 | cliui "^5.0.0" 1885 | decamelize "^1.2.0" 1886 | find-up "^3.0.0" 1887 | get-caller-file "^2.0.1" 1888 | require-directory "^2.1.1" 1889 | require-main-filename "^2.0.0" 1890 | set-blocking "^2.0.0" 1891 | string-width "^3.0.0" 1892 | which-module "^2.0.0" 1893 | y18n "^4.0.0" 1894 | yargs-parser "^15.0.1" 1895 | --------------------------------------------------------------------------------