├── .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 |
21 | - PNG on Wikipedia
22 |
--------------------------------------------------------------------------------
/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 |
21 | - PNG on Wikipedia
22 |
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 |
21 | - PNG on Wikipedia
22 |
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 |
--------------------------------------------------------------------------------