├── .gitignore ├── samples ├── split │ ├── wikihistory.json │ ├── index.yaml │ └── index.html └── combined │ ├── wikihistory.json │ ├── index.html │ ├── sub-folder │ └── index.html │ └── different-separator │ └── index.html ├── package.json ├── README.md ├── prep.py ├── run.js ├── LICENSE └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | content-combined 3 | content-split 4 | -------------------------------------------------------------------------------- /samples/split/wikihistory.json: -------------------------------------------------------------------------------- 1 | { 2 | "modified": "2019-03-23T22:52:16.710Z", 3 | "_generated": "2020-05-08T17:06:29.604Z", 4 | "contributors": [ 5 | "mdnwebdocs-bot", 6 | "Jeremie", 7 | "klez", 8 | "hbloomer" 9 | ] 10 | } -------------------------------------------------------------------------------- /samples/combined/wikihistory.json: -------------------------------------------------------------------------------- 1 | { 2 | "modified": "2019-03-23T22:52:16.710Z", 3 | "_generated": "2020-05-08T17:06:29.604Z", 4 | "contributors": [ 5 | "mdnwebdocs-bot", 6 | "Jeremie", 7 | "klez", 8 | "hbloomer" 9 | ] 10 | } -------------------------------------------------------------------------------- /samples/split/index.yaml: -------------------------------------------------------------------------------- 1 | title: PNG 2 | slug: Glossary/PNG 3 | summary: >- 4 | PNG (Portable Network Graphics) is a graphics file format that supports 5 | lossless data compression. 6 | tags: 7 | - Beginner 8 | - Composing 9 | - Glossary 10 | - Infrastructure 11 | - PNG 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "front-matter-experiment", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MPL-2.0", 6 | "dependencies": { 7 | "front-matter": "3.2.0", 8 | "gray-matter": "4.0.2", 9 | "js-yaml": "3.13.1", 10 | "mdify": "1.1.0", 11 | "parser-front-matter": "1.6.4" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /samples/split/index.html: -------------------------------------------------------------------------------- 1 |

PNG (Portable Network Graphics) is a graphics file format that supports lossless data compression.

2 | 3 |

Learn more

4 | 5 |

General knowledge

6 | 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # front-matter-experiment 2 | 3 | Exploring techniques for parsing `index.html` + `index.yaml` versus. 4 | putting the Yaml into the `index.html`. 5 | 6 | ## To dev 7 | 8 | You need a clone of [github.com/mdn/yari](https://github.com/mdn/yari). 9 | Then run something like this: 10 | 11 | cp -r ~/yari/content/files/en-us content-split 12 | cp -r ~/yari/content/files/en-us content-combined 13 | python prep.py 14 | 15 | Now run: 16 | 17 | node run.js 18 | 19 | ## What it looks like 20 | 21 | * [combined with front-matter](samples/combined/index.html) 22 | * [split without front-matter](samples/split/) 23 | -------------------------------------------------------------------------------- /samples/combined/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: PNG 3 | slug: Glossary/PNG 4 | summary: >- 5 | PNG (Portable Network Graphics) is a graphics file format that supports 6 | lossless data compression. 7 | tags: 8 | - Beginner 9 | - Composing 10 | - Glossary 11 | - Infrastructure 12 | - PNG 13 | --- 14 |

PNG (Portable Network Graphics) is a graphics file format that supports lossless data compression.

15 | 16 |

Learn more

17 | 18 |

General knowledge

19 | 20 | -------------------------------------------------------------------------------- /samples/combined/sub-folder/index.html: -------------------------------------------------------------------------------- 1 | 14 |

PNG (Portable Network Graphics) is a graphics file format that supports lossless data compression.

15 | 16 |

Learn more

17 | 18 |

General knowledge

19 | 20 | 23 | -------------------------------------------------------------------------------- /samples/combined/different-separator/index.html: -------------------------------------------------------------------------------- 1 | = yaml = 2 | title: PNG 3 | slug: Glossary/PNG 4 | summary: >- 5 | PNG (Portable Network Graphics) is a graphics file format that supports 6 | lossless data compression. 7 | tags: 8 | - Beginner 9 | - Composing 10 | - Glossary 11 | - Infrastructure 12 | - PNG 13 | = yaml = 14 |

PNG (Portable Network Graphics) is a graphics file format that supports lossless data compression.

15 | 16 |

Learn more

17 | 18 |

General knowledge

19 | 20 | 23 | -------------------------------------------------------------------------------- /prep.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | 4 | def combine(root): 5 | yaml = html = None 6 | for thing in root.iterdir(): 7 | if thing.is_dir(): 8 | combine(thing) 9 | elif thing.name == "index.html": 10 | with open(thing) as f: 11 | html = f.read() 12 | elif thing.name == "index.yaml": 13 | with open(thing) as f: 14 | yaml = f.read() 15 | thing.unlink() 16 | if yaml or html: 17 | assert yaml and html, root 18 | combined = f"---\n{yaml}---\n{html}" 19 | with open(root / "index.html", "w") as f: 20 | f.write(combined) 21 | print(root / "index.html") 22 | 23 | 24 | combine(Path("content-combined")) 25 | -------------------------------------------------------------------------------- /run.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | 4 | const fm = require("front-matter"); 5 | const yaml = require("js-yaml"); 6 | const mdify = require("mdify"); 7 | const matter = require("gray-matter"); 8 | const parser = require("parser-front-matter"); 9 | 10 | function f1() { 11 | const m = new Map(); 12 | for (const [folder, files] of walker("content-split")) { 13 | if (files.includes("index.yaml")) { 14 | const metadata = yaml.safeLoad( 15 | fs.readFileSync(path.join(folder, "index.yaml")) 16 | ); 17 | m.set(metadata.slug, folder); 18 | } 19 | } 20 | // console.log(m.size); 21 | } 22 | 23 | function f2() { 24 | const m = new Map(); 25 | for (const [folder, files] of walker("content-combined")) { 26 | if (files.includes("index.html")) { 27 | const metadata = fm( 28 | fs.readFileSync(path.join(folder, "index.html"), "utf8") 29 | ).attributes; 30 | m.set(metadata.slug, folder); 31 | } 32 | } 33 | // console.log(m.size); 34 | } 35 | 36 | function f3() { 37 | const m = new Map(); 38 | for (const [folder, files] of walker("content-combined")) { 39 | if (files.includes("index.html")) { 40 | const metadata = mdify.parse( 41 | fs.readFileSync(path.join(folder, "index.html"), "utf8"), 42 | { html: false } 43 | ).metadata; 44 | m.set(metadata.slug, folder); 45 | } 46 | } 47 | // console.log(m.size); 48 | } 49 | 50 | function f4() { 51 | const m = new Map(); 52 | for (const [folder, files] of walker("content-combined")) { 53 | if (files.includes("index.html")) { 54 | const metadata = matter( 55 | fs.readFileSync(path.join(folder, "index.html"), "utf8"), 56 | { html: false } 57 | ).data; 58 | m.set(metadata.slug, folder); 59 | } 60 | } 61 | // console.log(m.size); 62 | } 63 | 64 | function f5() { 65 | const m = new Map(); 66 | for (const [folder, files] of walker("content-combined")) { 67 | if (files.includes("index.html")) { 68 | const metadata = parser.parseSync( 69 | fs.readFileSync(path.join(folder, "index.html"), "utf8") 70 | ).data; 71 | m.set(metadata.slug, folder); 72 | } 73 | } 74 | // console.log(m.size); 75 | } 76 | 77 | function f1b() { 78 | const m = new Map(); 79 | for (const [folder, files] of walker("content-split")) { 80 | if (files.includes("index.yaml")) { 81 | const metadata = yaml.load( 82 | fs.readFileSync(path.join(folder, "index.yaml")) 83 | ); 84 | const bodySize = fs.readFileSync(path.join(folder, "index.html")).length; 85 | m.set(metadata.slug, bodySize); 86 | } 87 | } 88 | // console.log(m.size); 89 | } 90 | 91 | function f2b() { 92 | const m = new Map(); 93 | for (const [folder, files] of walker("content-combined")) { 94 | if (files.includes("index.html")) { 95 | const payload = fs.readFileSync(path.join(folder, "index.html"), "utf8"); 96 | const data = fm(payload); 97 | const metadata = data.attributes; 98 | const bodySize = data.body.length; 99 | m.set(metadata.slug, bodySize); 100 | } 101 | } 102 | // console.log(m.size); 103 | } 104 | 105 | function* walker(root, depth = 0) { 106 | const files = fs.readdirSync(root); 107 | if (!depth) { 108 | yield [ 109 | root, 110 | files.filter((name) => { 111 | return !fs.statSync(path.join(root, name)).isDirectory(); 112 | }), 113 | ]; 114 | } 115 | for (const name of files) { 116 | const filepath = path.join(root, name); 117 | const isDirectory = fs.statSync(filepath).isDirectory(); 118 | if (isDirectory) { 119 | yield [ 120 | filepath, 121 | fs.readdirSync(filepath).filter((name) => { 122 | return !fs.statSync(path.join(filepath, name)).isDirectory(); 123 | }), 124 | ]; 125 | // Now go deeper 126 | yield* walker(filepath, depth + 1); 127 | } 128 | } 129 | } 130 | 131 | const functions = [f5, f4, f3, f1, f2]; 132 | // const functions = [f1b, f2b]; 133 | 134 | compareFunctions(functions, (iterations = 36)); 135 | 136 | function compareFunctions(functions) { 137 | function fmt(ms) { 138 | return `${(ms / 1000).toFixed(3)}s`; 139 | } 140 | 141 | const times = Object.fromEntries(functions.map((f) => [f.name, []])); 142 | for (const i of [...Array(iterations).keys()]) { 143 | func = functions[i % functions.length]; 144 | const t0 = new Date(); 145 | func(); 146 | const t1 = new Date(); 147 | console.log(i + 1, func.name, fmt(t1 - t0)); 148 | times[func.name].push(t1 - t0); 149 | } 150 | console.log(""); 151 | 152 | const avgs = []; 153 | for (const f of Object.keys(times).sort()) { 154 | const nums = times[f]; 155 | const avg = nums.reduce((a, b) => a + b, 0) / nums.length; 156 | avgs.push([f, avg]); 157 | } 158 | avgs.sort((a, b) => a[1] - b[1]); 159 | const fastest = avgs[0][1]; 160 | // sort by name again 161 | avgs.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0)); 162 | 163 | for (const [f, avg] of avgs) { 164 | let p; 165 | if (avg === fastest) { 166 | p = "fastest"; 167 | } else { 168 | p = `${((100 * avg) / fastest - 100).toFixed(1)}% slower`; 169 | } 170 | console.log(f, fmt(avg), " ", p); 171 | } 172 | } 173 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Mozilla Public License Version 2.0 2 | ================================== 3 | 4 | 1. Definitions 5 | -------------- 6 | 7 | 1.1. "Contributor" 8 | means each individual or legal entity that creates, contributes to 9 | the creation of, or owns Covered Software. 10 | 11 | 1.2. "Contributor Version" 12 | means the combination of the Contributions of others (if any) used 13 | by a Contributor and that particular Contributor's Contribution. 14 | 15 | 1.3. "Contribution" 16 | means Covered Software of a particular Contributor. 17 | 18 | 1.4. "Covered Software" 19 | means Source Code Form to which the initial Contributor has attached 20 | the notice in Exhibit A, the Executable Form of such Source Code 21 | Form, and Modifications of such Source Code Form, in each case 22 | including portions thereof. 23 | 24 | 1.5. "Incompatible With Secondary Licenses" 25 | means 26 | 27 | (a) that the initial Contributor has attached the notice described 28 | in Exhibit B to the Covered Software; or 29 | 30 | (b) that the Covered Software was made available under the terms of 31 | version 1.1 or earlier of the License, but not also under the 32 | terms of a Secondary License. 33 | 34 | 1.6. "Executable Form" 35 | means any form of the work other than Source Code Form. 36 | 37 | 1.7. "Larger Work" 38 | means a work that combines Covered Software with other material, in 39 | a separate file or files, that is not Covered Software. 40 | 41 | 1.8. "License" 42 | means this document. 43 | 44 | 1.9. "Licensable" 45 | means having the right to grant, to the maximum extent possible, 46 | whether at the time of the initial grant or subsequently, any and 47 | all of the rights conveyed by this License. 48 | 49 | 1.10. "Modifications" 50 | means any of the following: 51 | 52 | (a) any file in Source Code Form that results from an addition to, 53 | deletion from, or modification of the contents of Covered 54 | Software; or 55 | 56 | (b) any new file in Source Code Form that contains any Covered 57 | Software. 58 | 59 | 1.11. "Patent Claims" of a Contributor 60 | means any patent claim(s), including without limitation, method, 61 | process, and apparatus claims, in any patent Licensable by such 62 | Contributor that would be infringed, but for the grant of the 63 | License, by the making, using, selling, offering for sale, having 64 | made, import, or transfer of either its Contributions or its 65 | Contributor Version. 66 | 67 | 1.12. "Secondary License" 68 | means either the GNU General Public License, Version 2.0, the GNU 69 | Lesser General Public License, Version 2.1, the GNU Affero General 70 | Public License, Version 3.0, or any later versions of those 71 | licenses. 72 | 73 | 1.13. "Source Code Form" 74 | means the form of the work preferred for making modifications. 75 | 76 | 1.14. "You" (or "Your") 77 | means an individual or a legal entity exercising rights under this 78 | License. For legal entities, "You" includes any entity that 79 | controls, is controlled by, or is under common control with You. For 80 | purposes of this definition, "control" means (a) the power, direct 81 | or indirect, to cause the direction or management of such entity, 82 | whether by contract or otherwise, or (b) ownership of more than 83 | fifty percent (50%) of the outstanding shares or beneficial 84 | ownership of such entity. 85 | 86 | 2. License Grants and Conditions 87 | -------------------------------- 88 | 89 | 2.1. Grants 90 | 91 | Each Contributor hereby grants You a world-wide, royalty-free, 92 | non-exclusive license: 93 | 94 | (a) under intellectual property rights (other than patent or trademark) 95 | Licensable by such Contributor to use, reproduce, make available, 96 | modify, display, perform, distribute, and otherwise exploit its 97 | Contributions, either on an unmodified basis, with Modifications, or 98 | as part of a Larger Work; and 99 | 100 | (b) under Patent Claims of such Contributor to make, use, sell, offer 101 | for sale, have made, import, and otherwise transfer either its 102 | Contributions or its Contributor Version. 103 | 104 | 2.2. Effective Date 105 | 106 | The licenses granted in Section 2.1 with respect to any Contribution 107 | become effective for each Contribution on the date the Contributor first 108 | distributes such Contribution. 109 | 110 | 2.3. Limitations on Grant Scope 111 | 112 | The licenses granted in this Section 2 are the only rights granted under 113 | this License. No additional rights or licenses will be implied from the 114 | distribution or licensing of Covered Software under this License. 115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a 116 | Contributor: 117 | 118 | (a) for any code that a Contributor has removed from Covered Software; 119 | or 120 | 121 | (b) for infringements caused by: (i) Your and any other third party's 122 | modifications of Covered Software, or (ii) the combination of its 123 | Contributions with other software (except as part of its Contributor 124 | Version); or 125 | 126 | (c) under Patent Claims infringed by Covered Software in the absence of 127 | its Contributions. 128 | 129 | This License does not grant any rights in the trademarks, service marks, 130 | or logos of any Contributor (except as may be necessary to comply with 131 | the notice requirements in Section 3.4). 132 | 133 | 2.4. Subsequent Licenses 134 | 135 | No Contributor makes additional grants as a result of Your choice to 136 | distribute the Covered Software under a subsequent version of this 137 | License (see Section 10.2) or under the terms of a Secondary License (if 138 | permitted under the terms of Section 3.3). 139 | 140 | 2.5. Representation 141 | 142 | Each Contributor represents that the Contributor believes its 143 | Contributions are its original creation(s) or it has sufficient rights 144 | to grant the rights to its Contributions conveyed by this License. 145 | 146 | 2.6. Fair Use 147 | 148 | This License is not intended to limit any rights You have under 149 | applicable copyright doctrines of fair use, fair dealing, or other 150 | equivalents. 151 | 152 | 2.7. Conditions 153 | 154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted 155 | in Section 2.1. 156 | 157 | 3. Responsibilities 158 | ------------------- 159 | 160 | 3.1. Distribution of Source Form 161 | 162 | All distribution of Covered Software in Source Code Form, including any 163 | Modifications that You create or to which You contribute, must be under 164 | the terms of this License. You must inform recipients that the Source 165 | Code Form of the Covered Software is governed by the terms of this 166 | License, and how they can obtain a copy of this License. You may not 167 | attempt to alter or restrict the recipients' rights in the Source Code 168 | Form. 169 | 170 | 3.2. Distribution of Executable Form 171 | 172 | If You distribute Covered Software in Executable Form then: 173 | 174 | (a) such Covered Software must also be made available in Source Code 175 | Form, as described in Section 3.1, and You must inform recipients of 176 | the Executable Form how they can obtain a copy of such Source Code 177 | Form by reasonable means in a timely manner, at a charge no more 178 | than the cost of distribution to the recipient; and 179 | 180 | (b) You may distribute such Executable Form under the terms of this 181 | License, or sublicense it under different terms, provided that the 182 | license for the Executable Form does not attempt to limit or alter 183 | the recipients' rights in the Source Code Form under this License. 184 | 185 | 3.3. Distribution of a Larger Work 186 | 187 | You may create and distribute a Larger Work under terms of Your choice, 188 | provided that You also comply with the requirements of this License for 189 | the Covered Software. If the Larger Work is a combination of Covered 190 | Software with a work governed by one or more Secondary Licenses, and the 191 | Covered Software is not Incompatible With Secondary Licenses, this 192 | License permits You to additionally distribute such Covered Software 193 | under the terms of such Secondary License(s), so that the recipient of 194 | the Larger Work may, at their option, further distribute the Covered 195 | Software under the terms of either this License or such Secondary 196 | License(s). 197 | 198 | 3.4. Notices 199 | 200 | You may not remove or alter the substance of any license notices 201 | (including copyright notices, patent notices, disclaimers of warranty, 202 | or limitations of liability) contained within the Source Code Form of 203 | the Covered Software, except that You may alter any license notices to 204 | the extent required to remedy known factual inaccuracies. 205 | 206 | 3.5. Application of Additional Terms 207 | 208 | You may choose to offer, and to charge a fee for, warranty, support, 209 | indemnity or liability obligations to one or more recipients of Covered 210 | Software. However, You may do so only on Your own behalf, and not on 211 | behalf of any Contributor. You must make it absolutely clear that any 212 | such warranty, support, indemnity, or liability obligation is offered by 213 | You alone, and You hereby agree to indemnify every Contributor for any 214 | liability incurred by such Contributor as a result of warranty, support, 215 | indemnity or liability terms You offer. You may include additional 216 | disclaimers of warranty and limitations of liability specific to any 217 | jurisdiction. 218 | 219 | 4. Inability to Comply Due to Statute or Regulation 220 | --------------------------------------------------- 221 | 222 | If it is impossible for You to comply with any of the terms of this 223 | License with respect to some or all of the Covered Software due to 224 | statute, judicial order, or regulation then You must: (a) comply with 225 | the terms of this License to the maximum extent possible; and (b) 226 | describe the limitations and the code they affect. Such description must 227 | be placed in a text file included with all distributions of the Covered 228 | Software under this License. Except to the extent prohibited by statute 229 | or regulation, such description must be sufficiently detailed for a 230 | recipient of ordinary skill to be able to understand it. 231 | 232 | 5. Termination 233 | -------------- 234 | 235 | 5.1. The rights granted under this License will terminate automatically 236 | if You fail to comply with any of its terms. However, if You become 237 | compliant, then the rights granted under this License from a particular 238 | Contributor are reinstated (a) provisionally, unless and until such 239 | Contributor explicitly and finally terminates Your grants, and (b) on an 240 | ongoing basis, if such Contributor fails to notify You of the 241 | non-compliance by some reasonable means prior to 60 days after You have 242 | come back into compliance. Moreover, Your grants from a particular 243 | Contributor are reinstated on an ongoing basis if such Contributor 244 | notifies You of the non-compliance by some reasonable means, this is the 245 | first time You have received notice of non-compliance with this License 246 | from such Contributor, and You become compliant prior to 30 days after 247 | Your receipt of the notice. 248 | 249 | 5.2. If You initiate litigation against any entity by asserting a patent 250 | infringement claim (excluding declaratory judgment actions, 251 | counter-claims, and cross-claims) alleging that a Contributor Version 252 | directly or indirectly infringes any patent, then the rights granted to 253 | You by any and all Contributors for the Covered Software under Section 254 | 2.1 of this License shall terminate. 255 | 256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all 257 | end user license agreements (excluding distributors and resellers) which 258 | have been validly granted by You or Your distributors under this License 259 | prior to termination shall survive termination. 260 | 261 | ************************************************************************ 262 | * * 263 | * 6. Disclaimer of Warranty * 264 | * ------------------------- * 265 | * * 266 | * Covered Software is provided under this License on an "as is" * 267 | * basis, without warranty of any kind, either expressed, implied, or * 268 | * statutory, including, without limitation, warranties that the * 269 | * Covered Software is free of defects, merchantable, fit for a * 270 | * particular purpose or non-infringing. The entire risk as to the * 271 | * quality and performance of the Covered Software is with You. * 272 | * Should any Covered Software prove defective in any respect, You * 273 | * (not any Contributor) assume the cost of any necessary servicing, * 274 | * repair, or correction. This disclaimer of warranty constitutes an * 275 | * essential part of this License. No use of any Covered Software is * 276 | * authorized under this License except under this disclaimer. * 277 | * * 278 | ************************************************************************ 279 | 280 | ************************************************************************ 281 | * * 282 | * 7. Limitation of Liability * 283 | * -------------------------- * 284 | * * 285 | * Under no circumstances and under no legal theory, whether tort * 286 | * (including negligence), contract, or otherwise, shall any * 287 | * Contributor, or anyone who distributes Covered Software as * 288 | * permitted above, be liable to You for any direct, indirect, * 289 | * special, incidental, or consequential damages of any character * 290 | * including, without limitation, damages for lost profits, loss of * 291 | * goodwill, work stoppage, computer failure or malfunction, or any * 292 | * and all other commercial damages or losses, even if such party * 293 | * shall have been informed of the possibility of such damages. This * 294 | * limitation of liability shall not apply to liability for death or * 295 | * personal injury resulting from such party's negligence to the * 296 | * extent applicable law prohibits such limitation. Some * 297 | * jurisdictions do not allow the exclusion or limitation of * 298 | * incidental or consequential damages, so this exclusion and * 299 | * limitation may not apply to You. * 300 | * * 301 | ************************************************************************ 302 | 303 | 8. Litigation 304 | ------------- 305 | 306 | Any litigation relating to this License may be brought only in the 307 | courts of a jurisdiction where the defendant maintains its principal 308 | place of business and such litigation shall be governed by laws of that 309 | jurisdiction, without reference to its conflict-of-law provisions. 310 | Nothing in this Section shall prevent a party's ability to bring 311 | cross-claims or counter-claims. 312 | 313 | 9. Miscellaneous 314 | ---------------- 315 | 316 | This License represents the complete agreement concerning the subject 317 | matter hereof. If any provision of this License is held to be 318 | unenforceable, such provision shall be reformed only to the extent 319 | necessary to make it enforceable. Any law or regulation which provides 320 | that the language of a contract shall be construed against the drafter 321 | shall not be used to construe this License against a Contributor. 322 | 323 | 10. Versions of the License 324 | --------------------------- 325 | 326 | 10.1. New Versions 327 | 328 | Mozilla Foundation is the license steward. Except as provided in Section 329 | 10.3, no one other than the license steward has the right to modify or 330 | publish new versions of this License. Each version will be given a 331 | distinguishing version number. 332 | 333 | 10.2. Effect of New Versions 334 | 335 | You may distribute the Covered Software under the terms of the version 336 | of the License under which You originally received the Covered Software, 337 | or under the terms of any subsequent version published by the license 338 | steward. 339 | 340 | 10.3. Modified Versions 341 | 342 | If you create software not governed by this License, and you want to 343 | create a new license for such software, you may create and use a 344 | modified version of this License if you rename the license and remove 345 | any references to the name of the license steward (except to note that 346 | such modified license differs from this License). 347 | 348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary 349 | Licenses 350 | 351 | If You choose to distribute Source Code Form that is Incompatible With 352 | Secondary Licenses under the terms of this version of the License, the 353 | notice described in Exhibit B of this License must be attached. 354 | 355 | Exhibit A - Source Code Form License Notice 356 | ------------------------------------------- 357 | 358 | This Source Code Form is subject to the terms of the Mozilla Public 359 | License, v. 2.0. If a copy of the MPL was not distributed with this 360 | file, You can obtain one at http://mozilla.org/MPL/2.0/. 361 | 362 | If it is not possible or desirable to put the notice in a particular 363 | file, then You may include the notice in a location (such as a LICENSE 364 | file in a relevant directory) where a recipient would be likely to look 365 | for such a notice. 366 | 367 | You may add additional accurate notices of copyright ownership. 368 | 369 | Exhibit B - "Incompatible With Secondary Licenses" Notice 370 | --------------------------------------------------------- 371 | 372 | This Source Code Form is "Incompatible With Secondary Licenses", as 373 | defined by the Mozilla Public License, v. 2.0. 374 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/js-yaml@^3.11.2": 6 | version "3.12.3" 7 | resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.3.tgz#abf383c5b639d0aa8b8c4a420d6a85f703357d6c" 8 | integrity sha512-otRe77JNNWzoVGLKw8TCspKswRoQToys4tuL6XYVBFxjgeM0RUrx7m3jkaTdxILxeGry3zM8mGYkGXMeQ02guA== 9 | 10 | "@types/showdown@^1.7.5": 11 | version "1.9.3" 12 | resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-1.9.3.tgz#eaa881b03a32d3720184731754d3025fc450b970" 13 | integrity sha512-akvzSmrvY4J5d3tHzUUiQr0xpjd4Nb3uzWW6dtwzYJ+qW/KdWw5F8NLatnor5q/1LURHnzDA1ReEwCVqcatRnw== 14 | 15 | ansi-regex@^4.1.0: 16 | version "4.1.0" 17 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 18 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 19 | 20 | ansi-styles@^3.2.0: 21 | version "3.2.1" 22 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 23 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 24 | dependencies: 25 | color-convert "^1.9.0" 26 | 27 | argparse@^1.0.7: 28 | version "1.0.10" 29 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 30 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 31 | dependencies: 32 | sprintf-js "~1.0.2" 33 | 34 | camelcase@^5.0.0: 35 | version "5.3.1" 36 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 37 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 38 | 39 | cliui@^5.0.0: 40 | version "5.0.0" 41 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 42 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 43 | dependencies: 44 | string-width "^3.1.0" 45 | strip-ansi "^5.2.0" 46 | wrap-ansi "^5.1.0" 47 | 48 | color-convert@^1.9.0: 49 | version "1.9.3" 50 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 51 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 52 | dependencies: 53 | color-name "1.1.3" 54 | 55 | color-name@1.1.3: 56 | version "1.1.3" 57 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 58 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 59 | 60 | decamelize@^1.2.0: 61 | version "1.2.0" 62 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 63 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 64 | 65 | deffy@^2.2.2: 66 | version "2.2.3" 67 | resolved "https://registry.yarnpkg.com/deffy/-/deffy-2.2.3.tgz#16671c969a8fc447c76dd6bb0d265dd2d1b9c361" 68 | integrity sha512-c5JD8Z6V1aBWVzn1+aELL97R1pHCwEjXeU3hZXdigkZkxb9vhgFP162kAxGXl992TtAg0btwQyx7d54CqcQaXQ== 69 | dependencies: 70 | typpy "^2.0.0" 71 | 72 | emoji-regex@^7.0.1: 73 | version "7.0.3" 74 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 75 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 76 | 77 | esprima@^4.0.0: 78 | version "4.0.1" 79 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 80 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 81 | 82 | extend-shallow@^2.0.1: 83 | version "2.0.1" 84 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 85 | integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= 86 | dependencies: 87 | is-extendable "^0.1.0" 88 | 89 | file-is-binary@^1.0.0: 90 | version "1.0.0" 91 | resolved "https://registry.yarnpkg.com/file-is-binary/-/file-is-binary-1.0.0.tgz#5e41806d1bcae458c8fec32fe3ce122dbbbc4356" 92 | integrity sha1-XkGAbRvK5FjI/sMv484SLbu8Q1Y= 93 | dependencies: 94 | is-binary-buffer "^1.0.0" 95 | isobject "^3.0.0" 96 | 97 | find-up@^3.0.0: 98 | version "3.0.0" 99 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 100 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 101 | dependencies: 102 | locate-path "^3.0.0" 103 | 104 | for-in@^1.0.2: 105 | version "1.0.2" 106 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 107 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= 108 | 109 | front-matter@3.2.0: 110 | version "3.2.0" 111 | resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-3.2.0.tgz#371c6862fd8feb2c382374c34e4cd3391cb8f81f" 112 | integrity sha512-/+aOB9LCJQNO+AsgCx75lF5YgNLq7KBzGModuADYAtop+GIaKgX++HVLBrzCPMwKaJKVjupumzx4aM8PLQsqtg== 113 | dependencies: 114 | js-yaml "^3.13.1" 115 | 116 | function.name@^1.0.3: 117 | version "1.0.12" 118 | resolved "https://registry.yarnpkg.com/function.name/-/function.name-1.0.12.tgz#34eec84476d9fb67977924a4cdcb98ec85695726" 119 | integrity sha512-C7Tu+rAFrWW5RjXqtKtXp2xOdCujq+4i8ZH3w0uz/xrYHBwXZrPt96x8cDAEHrIjeyEv/Jm6iDGyqupbaVQTlw== 120 | dependencies: 121 | noop6 "^1.0.1" 122 | 123 | get-caller-file@^2.0.1: 124 | version "2.0.5" 125 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 126 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 127 | 128 | gray-matter@4.0.2: 129 | version "4.0.2" 130 | resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454" 131 | integrity sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw== 132 | dependencies: 133 | js-yaml "^3.11.0" 134 | kind-of "^6.0.2" 135 | section-matter "^1.0.0" 136 | strip-bom-string "^1.0.0" 137 | 138 | gray-matter@^3.0.2: 139 | version "3.1.1" 140 | resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-3.1.1.tgz#101f80d9e69eeca6765cdce437705b18f40876ac" 141 | integrity sha512-nZ1qjLmayEv0/wt3sHig7I0s3/sJO0dkAaKYQ5YAOApUtYEOonXSFdWvL1khvnZMTvov4UufkqlFsilPnejEXA== 142 | dependencies: 143 | extend-shallow "^2.0.1" 144 | js-yaml "^3.10.0" 145 | kind-of "^5.0.2" 146 | strip-bom-string "^1.0.0" 147 | 148 | is-binary-buffer@^1.0.0: 149 | version "1.0.0" 150 | resolved "https://registry.yarnpkg.com/is-binary-buffer/-/is-binary-buffer-1.0.0.tgz#bc6031290b65cbf799b9d9502b50fd5375524007" 151 | integrity sha1-vGAxKQtly/eZudlQK1D9U3VSQAc= 152 | dependencies: 153 | is-buffer "^1.1.5" 154 | 155 | is-buffer@^1.1.5: 156 | version "1.1.6" 157 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 158 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 159 | 160 | is-extendable@^0.1.0: 161 | version "0.1.1" 162 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 163 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= 164 | 165 | is-extendable@^1.0.1: 166 | version "1.0.1" 167 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 168 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 169 | dependencies: 170 | is-plain-object "^2.0.4" 171 | 172 | is-fullwidth-code-point@^2.0.0: 173 | version "2.0.0" 174 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 175 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 176 | 177 | is-plain-object@^2.0.4: 178 | version "2.0.4" 179 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 180 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 181 | dependencies: 182 | isobject "^3.0.1" 183 | 184 | is-whitespace@^0.3.0: 185 | version "0.3.0" 186 | resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" 187 | integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= 188 | 189 | isobject@^3.0.0, isobject@^3.0.1: 190 | version "3.0.1" 191 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 192 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= 193 | 194 | js-yaml@3.13.1, js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.13.1, js-yaml@^3.6.1: 195 | version "3.13.1" 196 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 197 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 198 | dependencies: 199 | argparse "^1.0.7" 200 | esprima "^4.0.0" 201 | 202 | kind-of@^3.0.2: 203 | version "3.2.2" 204 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 205 | integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= 206 | dependencies: 207 | is-buffer "^1.1.5" 208 | 209 | kind-of@^5.0.2: 210 | version "5.1.0" 211 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 212 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== 213 | 214 | kind-of@^6.0.0, kind-of@^6.0.2: 215 | version "6.0.3" 216 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 217 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 218 | 219 | lazy-cache@^2.0.2: 220 | version "2.0.2" 221 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" 222 | integrity sha1-uRkKT5EzVGlIQIWfio9whNiCImQ= 223 | dependencies: 224 | set-getter "^0.1.0" 225 | 226 | locate-path@^3.0.0: 227 | version "3.0.0" 228 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 229 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 230 | dependencies: 231 | p-locate "^3.0.0" 232 | path-exists "^3.0.0" 233 | 234 | mdify@1.1.0: 235 | version "1.1.0" 236 | resolved "https://registry.yarnpkg.com/mdify/-/mdify-1.1.0.tgz#4a80ff5ec3e09a0cf4cea0a3f198a9af3c43c970" 237 | integrity sha512-HHWInRYbBnHRF42gYmjLFqqcW/ZKNdRflBfI8T3YGHNCAWc6aKvJbNTaTi19Kn+yD6sIvC/1EgxNmHzuDyEEZw== 238 | dependencies: 239 | "@types/js-yaml" "^3.11.2" 240 | "@types/showdown" "^1.7.5" 241 | js-yaml "^3.6.1" 242 | read-utf8 "^1.2.3" 243 | showdown "^1.4.1" 244 | ul "^5.2.2" 245 | 246 | mixin-deep@^1.2.0: 247 | version "1.3.2" 248 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" 249 | integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== 250 | dependencies: 251 | for-in "^1.0.2" 252 | is-extendable "^1.0.1" 253 | 254 | noop6@^1.0.1: 255 | version "1.0.8" 256 | resolved "https://registry.yarnpkg.com/noop6/-/noop6-1.0.8.tgz#eff06e2e5b3621e9e5618f389d6a2294f76e64ad" 257 | integrity sha512-+Al5csMVc40I8xRfJsyBcN1IbpyvebOuQmMfxdw+AL6ECELey12ANgNTRhMfTwNIDU4W9W0g8EHLcsb3+3qPFA== 258 | 259 | p-limit@^2.0.0: 260 | version "2.3.0" 261 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 262 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 263 | dependencies: 264 | p-try "^2.0.0" 265 | 266 | p-locate@^3.0.0: 267 | version "3.0.0" 268 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 269 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 270 | dependencies: 271 | p-limit "^2.0.0" 272 | 273 | p-try@^2.0.0: 274 | version "2.2.0" 275 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 276 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 277 | 278 | parser-front-matter@1.6.4: 279 | version "1.6.4" 280 | resolved "https://registry.yarnpkg.com/parser-front-matter/-/parser-front-matter-1.6.4.tgz#71fe3288a51c7b8734163f3793f3fdc24b0a8a90" 281 | integrity sha512-eqtUnI5+COkf1CQOYo8FmykN5Zs+5Yr60f/7GcPgQDZEEjdE/VZ4WMaMo9g37foof8h64t/TH2Uvk2Sq0fDy/g== 282 | dependencies: 283 | extend-shallow "^2.0.1" 284 | file-is-binary "^1.0.0" 285 | gray-matter "^3.0.2" 286 | isobject "^3.0.1" 287 | lazy-cache "^2.0.2" 288 | mixin-deep "^1.2.0" 289 | trim-leading-lines "^0.1.1" 290 | 291 | path-exists@^3.0.0: 292 | version "3.0.0" 293 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 294 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 295 | 296 | read-utf8@^1.2.3: 297 | version "1.2.9" 298 | resolved "https://registry.yarnpkg.com/read-utf8/-/read-utf8-1.2.9.tgz#6ff351416c1e77069df358b8cbfcc39ef22ad872" 299 | integrity sha512-I6ctLZL+M9fEACC9nwMxwaq0jKzhIjjohEOQ8ROFoyD70xcjiwQGkecu7MEq6n2v4nJg+CUKNmD1qYvtT9YoPA== 300 | 301 | require-directory@^2.1.1: 302 | version "2.1.1" 303 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 304 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 305 | 306 | require-main-filename@^2.0.0: 307 | version "2.0.0" 308 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 309 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 310 | 311 | section-matter@^1.0.0: 312 | version "1.0.0" 313 | resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" 314 | integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== 315 | dependencies: 316 | extend-shallow "^2.0.1" 317 | kind-of "^6.0.0" 318 | 319 | set-blocking@^2.0.0: 320 | version "2.0.0" 321 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 322 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 323 | 324 | set-getter@^0.1.0: 325 | version "0.1.0" 326 | resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" 327 | integrity sha1-12nBgsnVpR9AkUXy+6guXoboA3Y= 328 | dependencies: 329 | to-object-path "^0.3.0" 330 | 331 | showdown@^1.4.1: 332 | version "1.9.1" 333 | resolved "https://registry.yarnpkg.com/showdown/-/showdown-1.9.1.tgz#134e148e75cd4623e09c21b0511977d79b5ad0ef" 334 | integrity sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA== 335 | dependencies: 336 | yargs "^14.2" 337 | 338 | sprintf-js@~1.0.2: 339 | version "1.0.3" 340 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 341 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 342 | 343 | string-width@^3.0.0, string-width@^3.1.0: 344 | version "3.1.0" 345 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 346 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 347 | dependencies: 348 | emoji-regex "^7.0.1" 349 | is-fullwidth-code-point "^2.0.0" 350 | strip-ansi "^5.1.0" 351 | 352 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 353 | version "5.2.0" 354 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 355 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 356 | dependencies: 357 | ansi-regex "^4.1.0" 358 | 359 | strip-bom-string@^1.0.0: 360 | version "1.0.0" 361 | resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" 362 | integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= 363 | 364 | to-object-path@^0.3.0: 365 | version "0.3.0" 366 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 367 | integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= 368 | dependencies: 369 | kind-of "^3.0.2" 370 | 371 | trim-leading-lines@^0.1.1: 372 | version "0.1.1" 373 | resolved "https://registry.yarnpkg.com/trim-leading-lines/-/trim-leading-lines-0.1.1.tgz#0e7cac3e83042dcf95a74ed36966f17744d5c169" 374 | integrity sha1-DnysPoMELc+Vp07TaWbxd0TVwWk= 375 | dependencies: 376 | is-whitespace "^0.3.0" 377 | 378 | typpy@^2.0.0, typpy@^2.3.4: 379 | version "2.3.11" 380 | resolved "https://registry.yarnpkg.com/typpy/-/typpy-2.3.11.tgz#21a0d22c96fb646306e08b6c669ad43608e1b3b9" 381 | integrity sha512-Jh/fykZSaxeKO0ceMAs6agki9T5TNA9kiIR6fzKbvafKpIw8UlNlHhzuqKyi5lfJJ5VojJOx9tooIbyy7vHV/g== 382 | dependencies: 383 | function.name "^1.0.3" 384 | 385 | ul@^5.2.2: 386 | version "5.2.14" 387 | resolved "https://registry.yarnpkg.com/ul/-/ul-5.2.14.tgz#560abd28d0f9762010b0e7a84a56e7208166f61a" 388 | integrity sha512-VaIRQZ5nkEd8VtI3OYo5qNbhHQuBtPtu5k5GrYaKCmcP1H+FkuWtS+XFTSU1oz5GiuAg2FJL5ka8ufr9zdm8eg== 389 | dependencies: 390 | deffy "^2.2.2" 391 | typpy "^2.3.4" 392 | 393 | which-module@^2.0.0: 394 | version "2.0.0" 395 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 396 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 397 | 398 | wrap-ansi@^5.1.0: 399 | version "5.1.0" 400 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 401 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 402 | dependencies: 403 | ansi-styles "^3.2.0" 404 | string-width "^3.0.0" 405 | strip-ansi "^5.0.0" 406 | 407 | y18n@^4.0.0: 408 | version "4.0.0" 409 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 410 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 411 | 412 | yargs-parser@^15.0.1: 413 | version "15.0.1" 414 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" 415 | integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== 416 | dependencies: 417 | camelcase "^5.0.0" 418 | decamelize "^1.2.0" 419 | 420 | yargs@^14.2: 421 | version "14.2.3" 422 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" 423 | integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== 424 | dependencies: 425 | cliui "^5.0.0" 426 | decamelize "^1.2.0" 427 | find-up "^3.0.0" 428 | get-caller-file "^2.0.1" 429 | require-directory "^2.1.1" 430 | require-main-filename "^2.0.0" 431 | set-blocking "^2.0.0" 432 | string-width "^3.0.0" 433 | which-module "^2.0.0" 434 | y18n "^4.0.0" 435 | yargs-parser "^15.0.1" 436 | --------------------------------------------------------------------------------