├── .gitignore ├── .vscode ├── settings.json └── launch.json ├── lib ├── WikiLinkNode.d.ts ├── Note.d.ts ├── createLinkMap.ts ├── processor.ts ├── getBacklinksBlock.ts ├── getNoteLinks.ts ├── readAllNotes.ts └── updateBacklinks.ts ├── tsconfig.json ├── .github └── workflows │ └── note-link-janitor.yml ├── action.yml ├── package.json ├── LICENSE ├── index.ts ├── Readme.md └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "dist": true 4 | }, 5 | "editor.formatOnSave": true, 6 | "typescript.tsdk": "node_modules/typescript/lib" 7 | } 8 | -------------------------------------------------------------------------------- /lib/WikiLinkNode.d.ts: -------------------------------------------------------------------------------- 1 | import * as UNIST from "unist"; 2 | 3 | export interface WikiLinkNode extends UNIST.Node { 4 | value: string; 5 | data: { 6 | alias: string; 7 | permalink: string; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /lib/Note.d.ts: -------------------------------------------------------------------------------- 1 | import * as MDAST from "mdast"; 2 | 3 | import { NoteLinkEntry } from "./getNoteLinks"; 4 | 5 | export interface Note { 6 | title: string; 7 | links: NoteLinkEntry[]; 8 | parseTree: MDAST.Root; 9 | } 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["es2020"], 4 | "module": "commonjs", 5 | "target": "es2020", 6 | "outDir": "out", 7 | "sourceMap": true, 8 | "strictNullChecks": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.github/workflows/note-link-janitor.yml: -------------------------------------------------------------------------------- 1 | name: Note Link Janitor 2 | 3 | on: 4 | gollum: 5 | workflow_dispatch: 6 | 7 | jobs: 8 | update: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | with: 13 | repository: ${{github.repository}}.wiki 14 | - uses: sander/note-link-janitor@v5 15 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: Maintain backlinks in wiki 2 | description: Add or update a backlinks section to each wiki page. 3 | branding: 4 | icon: skip-back 5 | color: gray-dark 6 | runs: 7 | using: "composite" 8 | steps: 9 | - run: yarn install && yarn run build 10 | shell: bash 11 | working-directory: ${{ github.action_path }} 12 | - run: | 13 | ${{ github.action_path }}/dist/index.js . 14 | git config user.name "github-actions[bot]" 15 | git config user.email "41898282+github-actions[bot]@users.noreply.github.com" 16 | git add . 17 | git commit -m "Update backlinks" || true 18 | git push 19 | shell: bash 20 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "ts-node", 9 | "type": "node", 10 | "runtimeVersion": "12.6.0", 11 | "request": "launch", 12 | "args": ["${relativeFile}"], 13 | "runtimeArgs": ["--nolazy", "-r", "ts-node/register"], 14 | "cwd": "${workspaceRoot}", 15 | "protocol": "inspector", 16 | "internalConsoleOptions": "openOnSessionStart", 17 | "env": { 18 | "TS_NODE_PROJECT": "${workspaceFolder}/tsconfig.json", 19 | "TS_NODE_TRANSPILE_ONLY": "true" 20 | } 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /lib/createLinkMap.ts: -------------------------------------------------------------------------------- 1 | import * as MDAST from "mdast"; 2 | 3 | import { Note } from "./Note"; 4 | 5 | export default function createLinkMap(notes: Note[]) { 6 | const linkMap: Map> = new Map(); 7 | for (const note of notes) { 8 | for (const link of note.links) { 9 | const targetTitle = link.targetTitle; 10 | let backlinkEntryMap = linkMap.get(targetTitle); 11 | if (!backlinkEntryMap) { 12 | backlinkEntryMap = new Map(); 13 | linkMap.set(targetTitle, backlinkEntryMap); 14 | } 15 | let contextList = backlinkEntryMap.get(note.title); 16 | if (!contextList) { 17 | contextList = []; 18 | backlinkEntryMap.set(note.title, contextList); 19 | } 20 | if (link.context) { 21 | contextList.push(link.context); 22 | } 23 | } 24 | } 25 | 26 | return linkMap; 27 | } 28 | -------------------------------------------------------------------------------- /lib/processor.ts: -------------------------------------------------------------------------------- 1 | import * as RemarkParse from "remark-parse"; 2 | import * as RemarkStringify from "remark-stringify"; 3 | import * as RemarkWikiLink from "remark-wiki-link"; 4 | 5 | import unified = require("unified"); 6 | 7 | // TODO adopt the more general parser in incremental-thinking 8 | 9 | function allLinksHaveTitles() { 10 | const Compiler = this.Compiler; 11 | const visitors = Compiler.prototype.visitors; 12 | const original = visitors.link; 13 | 14 | visitors.link = function(linkNode) { 15 | return original.bind(this)({ 16 | ...linkNode, 17 | title: linkNode.title || "" 18 | }); 19 | }; 20 | } 21 | 22 | const processor = unified() 23 | .use(RemarkParse as any, { commonmark: true, pedantic: true }) // type decl doesn't have options 24 | .use(RemarkStringify, { 25 | bullet: "*", 26 | emphasis: "*", 27 | listItemIndent: "1", 28 | rule: "-", 29 | ruleSpaces: false 30 | }) 31 | .use(allLinksHaveTitles) 32 | .use(RemarkWikiLink); 33 | 34 | export default processor; 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@andymatuschak/note-link-janitor", 3 | "version": "0.0.1", 4 | "author": "Andy Matuschak", 5 | "main": "out/index.js", 6 | "license": "MIT", 7 | "devDependencies": { 8 | "@paperist/types-remark": "^0.1.3", 9 | "@types/node": "^12.6.6", 10 | "@types/unist": "^2.0.3", 11 | "prettier": "~1", 12 | "ts-node": "^8.3.0", 13 | "typescript": "~3" 14 | }, 15 | "repository": "andymatuschak/note-link-janitor", 16 | "dependencies": { 17 | "@types/mdast": "^3.0.3", 18 | "pagerank.js": "^1.0.2", 19 | "remark": "^11.0.1", 20 | "remark-parse": "~7", 21 | "remark-stringify": "~7", 22 | "remark-wiki-link": "^0.0.4", 23 | "unified": "^8.4.0", 24 | "unist-util-find": "^1.0.1", 25 | "unist-util-is": "^4.0.0", 26 | "unist-util-visit-parents": "^3.0.1" 27 | }, 28 | "engines": { 29 | "node": ">= 12.0.0" 30 | }, 31 | "scripts": { 32 | "build": "tsc -p . --outDir dist && chmod +x dist/index.js" 33 | }, 34 | "bin": { 35 | "note-link-janitor": "./dist/index.js" 36 | }, 37 | "files": [ 38 | "Readme.md", 39 | "dist/**/*" 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Andy Matuschak 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lib/getBacklinksBlock.ts: -------------------------------------------------------------------------------- 1 | import * as MDAST from "mdast"; 2 | import * as UNIST from "unist"; 3 | import * as is from "unist-util-is"; 4 | 5 | // Hacky type predicate here. 6 | function isClosingMatterNode(node: UNIST.Node): node is UNIST.Node { 7 | return "value" in node && (node as MDAST.HTML).value.startsWith("` block at the end of your note, the backlinks will be inserted before that block. 21 | 22 | ## Assumptions/warnings 23 | 24 | 1. Links are formatted `[[like this]]`. 25 | 2. Note titles are inferred from the first line of each note, which is assumed to be formatted as a heading, i.e. `# Note title`. If this heading is not available, the GitHub wiki / Gollum scheme is used: the file name serves as the title, with dashes (`-`) replaced by spaces. 26 | 3. All `.md` files are siblings; the script does not currently recursively traverse subtrees (though that would be a simple modification if you need it; see `lib/readAllNotes.ts`) 27 | 4. The backlinks "section" is defined as the AST span between `## Backlinks` and the next heading tag (or `` tag). Any text you might add to this section will be clobbered. Don't append text after the backlinks list without a heading in between! (I like to leave my backlinks list at the end of the file) 28 | 29 | ### This is FYI-style open source 30 | 31 | This is FYI-style open source. I'm sharing it for interested parties, but without any stewardship commitment. Assume that my default response to issues and pull requests will be to ignore or close them without comment. If you do something interesting with this, though, please let me know (see contact details in the [original repository](https://github.com/andymatuschak/note-link-janitor)). 32 | 33 | ## Usage 34 | 35 | ### Using it in GitHub Actions 36 | 37 | Add the following workflow to e.g. `.github/workflows/note-link-janitor.yml`: 38 | 39 | ```yaml 40 | name: Note Link Janitor 41 | 42 | on: 43 | gollum: 44 | workflow_dispatch: 45 | 46 | jobs: 47 | update: 48 | runs-on: ubuntu-latest 49 | steps: 50 | - uses: actions/checkout@v2 51 | with: 52 | repository: ${{github.repository}}.wiki 53 | - uses: sander/note-link-janitor@v5 54 | ``` 55 | 56 | Then trigger the workflow by either editing a wiki page, or manually by using the **Run workflow** button in the GitHub Actions tab. 57 | 58 | ### Running it locally 59 | 60 | To install a published release, run: 61 | 62 | ``` 63 | yarn global add @andymatuschak/note-link-janitor 64 | ``` 65 | 66 | Then to run it (note that it will modify your `.md` files _in-place_; you may want to make a backup!): 67 | 68 | ``` 69 | note-link-janitor path/to/folder/containing/md/files 70 | ``` 71 | 72 | That will run it once; you'll need to create a cron job or a launch daemon to run it regularly. 73 | 74 | It's built to run against Node >=12, so you may need to upgrade or swap your runtime version. 75 | 76 | ## Building a local copy 77 | 78 | ``` 79 | yarn install 80 | yarn run build 81 | ``` 82 | 83 | ## Future work 84 | 85 | In the future, I intend to expand this project to monitor for broken links, orphans, and other interesting hypertext-y predicates. 86 | 87 | --- 88 | 89 | Arthur Perret [has localized this tool into French](https://github.com/infologie/note-link-janitor-fr). 90 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.4.4": 6 | version "7.6.0" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.0.tgz#4fc1d642a9fd0299754e8b5de62c631cf5568205" 8 | integrity sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ== 9 | dependencies: 10 | regenerator-runtime "^0.13.2" 11 | 12 | "@paperist/types-remark@^0.1.3": 13 | version "0.1.3" 14 | resolved "https://registry.yarnpkg.com/@paperist/types-remark/-/types-remark-0.1.3.tgz#a47f49d613d579630543f5cbc7736c90fbf8fde5" 15 | integrity sha512-liJvMxGB0IinhxcoMYiSVOgk2z5CZ5/gvpNCXzVC9xVGVtON0lLJZro1ixo5qZJg1ir6N0BY99Y1u6jp2ZNYEg== 16 | 17 | "@types/mdast@^3.0.3": 18 | version "3.0.3" 19 | resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" 20 | integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== 21 | dependencies: 22 | "@types/unist" "*" 23 | 24 | "@types/node@^12.6.6": 25 | version "12.12.9" 26 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.9.tgz#0b5ae05516b757cbff2e82c04500190aef986c7b" 27 | integrity sha512-kV3w4KeLsRBW+O2rKhktBwENNJuqAUQHS3kf4ia2wIaF/MN6U7ANgTsx7tGremcA0Pk3Yh0Hl0iKiLPuBdIgmw== 28 | 29 | "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": 30 | version "2.0.3" 31 | resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" 32 | integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== 33 | 34 | arg@^4.1.0: 35 | version "4.1.1" 36 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c" 37 | integrity sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw== 38 | 39 | bail@^1.0.0: 40 | version "1.0.4" 41 | resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b" 42 | integrity sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww== 43 | 44 | buffer-from@^1.0.0: 45 | version "1.1.1" 46 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 47 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 48 | 49 | ccount@^1.0.0: 50 | version "1.0.4" 51 | resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386" 52 | integrity sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w== 53 | 54 | character-entities-html4@^1.0.0: 55 | version "1.1.3" 56 | resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.3.tgz#5ce6e01618e47048ac22f34f7f39db5c6fd679ef" 57 | integrity sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg== 58 | 59 | character-entities-legacy@^1.0.0: 60 | version "1.1.3" 61 | resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" 62 | integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== 63 | 64 | character-entities@^1.0.0: 65 | version "1.2.3" 66 | resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" 67 | integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== 68 | 69 | character-reference-invalid@^1.0.0: 70 | version "1.1.3" 71 | resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" 72 | integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== 73 | 74 | collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: 75 | version "1.0.5" 76 | resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a" 77 | integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ== 78 | 79 | diff@^4.0.1: 80 | version "4.0.1" 81 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" 82 | integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== 83 | 84 | extend@^3.0.0: 85 | version "3.0.2" 86 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 87 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 88 | 89 | function-bind@^1.1.1: 90 | version "1.1.1" 91 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 92 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 93 | 94 | has@^1.0.1: 95 | version "1.0.3" 96 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 97 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 98 | dependencies: 99 | function-bind "^1.1.1" 100 | 101 | inherits@^2.0.1: 102 | version "2.0.4" 103 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 104 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 105 | 106 | is-alphabetical@^1.0.0: 107 | version "1.0.3" 108 | resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" 109 | integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== 110 | 111 | is-alphanumeric@^1.0.0: 112 | version "1.0.0" 113 | resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" 114 | integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= 115 | 116 | is-alphanumerical@^1.0.0: 117 | version "1.0.3" 118 | resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" 119 | integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== 120 | dependencies: 121 | is-alphabetical "^1.0.0" 122 | is-decimal "^1.0.0" 123 | 124 | is-buffer@^2.0.0: 125 | version "2.0.4" 126 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 127 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== 128 | 129 | is-decimal@^1.0.0, is-decimal@^1.0.2: 130 | version "1.0.3" 131 | resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" 132 | integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== 133 | 134 | is-hexadecimal@^1.0.0: 135 | version "1.0.3" 136 | resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" 137 | integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== 138 | 139 | is-plain-obj@^2.0.0: 140 | version "2.0.0" 141 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.0.0.tgz#7fd1a7f1b69e160cde9181d2313f445c68aa2679" 142 | integrity sha512-EYisGhpgSCwspmIuRHGjROWTon2Xp8Z7U03Wubk/bTL5TTRC5R1rGVgyjzBrk9+ULdH6cRD06KRcw/xfqhVYKQ== 143 | 144 | is-whitespace-character@^1.0.0: 145 | version "1.0.3" 146 | resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac" 147 | integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ== 148 | 149 | is-word-character@^1.0.0: 150 | version "1.0.3" 151 | resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa" 152 | integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A== 153 | 154 | lodash.iteratee@^4.5.0: 155 | version "4.7.0" 156 | resolved "https://registry.yarnpkg.com/lodash.iteratee/-/lodash.iteratee-4.7.0.tgz#be4177db289a8ccc3c0990f1db26b5b22fc1554c" 157 | integrity sha1-vkF32yiajMw8CZDx2ya1si/BVUw= 158 | 159 | longest-streak@^1.0.0: 160 | version "1.0.0" 161 | resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-1.0.0.tgz#d06597c4d4c31b52ccb1f5d8f8fe7148eafd6965" 162 | integrity sha1-0GWXxNTDG1LMsfXY+P5xSOr9aWU= 163 | 164 | longest-streak@^2.0.1: 165 | version "2.0.3" 166 | resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105" 167 | integrity sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw== 168 | 169 | make-error@^1.1.1: 170 | version "1.3.5" 171 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" 172 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== 173 | 174 | markdown-escapes@^1.0.0: 175 | version "1.0.3" 176 | resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5" 177 | integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw== 178 | 179 | markdown-table@^0.4.0: 180 | version "0.4.0" 181 | resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-0.4.0.tgz#890c2c1b3bfe83fb00e4129b8e4cfe645270f9d1" 182 | integrity sha1-iQwsGzv+g/sA5BKbjkz+ZFJw+dE= 183 | 184 | markdown-table@^1.1.0: 185 | version "1.1.3" 186 | resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" 187 | integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== 188 | 189 | mdast-util-compact@^1.0.0: 190 | version "1.0.4" 191 | resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" 192 | integrity sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg== 193 | dependencies: 194 | unist-util-visit "^1.1.0" 195 | 196 | object-assign@^4.0.1: 197 | version "4.1.1" 198 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 199 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 200 | 201 | once@^1.3.3: 202 | version "1.4.0" 203 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 204 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 205 | dependencies: 206 | wrappy "1" 207 | 208 | pagerank.js@^1.0.2: 209 | version "1.0.2" 210 | resolved "https://registry.yarnpkg.com/pagerank.js/-/pagerank.js-1.0.2.tgz#8f0d8b2b68eb6fadde0aad780df045d226f77584" 211 | integrity sha1-jw2LK2jrb63eCq14DfBF0ib3dYQ= 212 | 213 | parse-entities@^1.0.2, parse-entities@^1.1.0: 214 | version "1.2.2" 215 | resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" 216 | integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== 217 | dependencies: 218 | character-entities "^1.0.0" 219 | character-entities-legacy "^1.0.0" 220 | character-reference-invalid "^1.0.0" 221 | is-alphanumerical "^1.0.0" 222 | is-decimal "^1.0.0" 223 | is-hexadecimal "^1.0.0" 224 | 225 | prettier@~1: 226 | version "1.19.1" 227 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" 228 | integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== 229 | 230 | regenerator-runtime@^0.13.2: 231 | version "0.13.3" 232 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" 233 | integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== 234 | 235 | remark-parse@^1.1.0: 236 | version "1.1.0" 237 | resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-1.1.0.tgz#c3ca10f9a8da04615c28f09aa4e304510526ec21" 238 | integrity sha1-w8oQ+ajaBGFcKPCapOMEUQUm7CE= 239 | dependencies: 240 | collapse-white-space "^1.0.0" 241 | extend "^3.0.0" 242 | parse-entities "^1.0.2" 243 | repeat-string "^1.5.4" 244 | trim "0.0.1" 245 | trim-trailing-lines "^1.0.0" 246 | unherit "^1.0.4" 247 | unist-util-remove-position "^1.0.0" 248 | vfile-location "^2.0.0" 249 | 250 | remark-parse@^7.0.0, remark-parse@~7: 251 | version "7.0.2" 252 | resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf" 253 | integrity sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA== 254 | dependencies: 255 | collapse-white-space "^1.0.2" 256 | is-alphabetical "^1.0.0" 257 | is-decimal "^1.0.0" 258 | is-whitespace-character "^1.0.0" 259 | is-word-character "^1.0.0" 260 | markdown-escapes "^1.0.0" 261 | parse-entities "^1.1.0" 262 | repeat-string "^1.5.4" 263 | state-toggle "^1.0.0" 264 | trim "0.0.1" 265 | trim-trailing-lines "^1.0.0" 266 | unherit "^1.0.4" 267 | unist-util-remove-position "^1.0.0" 268 | vfile-location "^2.0.0" 269 | xtend "^4.0.1" 270 | 271 | remark-stringify@^1.1.0: 272 | version "1.1.0" 273 | resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-1.1.0.tgz#a7105e25b9ee2bf9a49b75d2c423f11b06ae2092" 274 | integrity sha1-pxBeJbnuK/mkm3XSxCPxGwauIJI= 275 | dependencies: 276 | ccount "^1.0.0" 277 | extend "^3.0.0" 278 | longest-streak "^1.0.0" 279 | markdown-table "^0.4.0" 280 | parse-entities "^1.0.2" 281 | repeat-string "^1.5.4" 282 | stringify-entities "^1.0.1" 283 | unherit "^1.0.4" 284 | 285 | remark-stringify@^7.0.0, remark-stringify@~7: 286 | version "7.0.4" 287 | resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-7.0.4.tgz#3de1e3f93853288d3407da1cd44f2212321dd548" 288 | integrity sha512-qck+8NeA1D0utk1ttKcWAoHRrJxERYQzkHDyn+pF5Z4whX1ug98uCNPPSeFgLSaNERRxnD6oxIug6DzZQth6Pg== 289 | dependencies: 290 | ccount "^1.0.0" 291 | is-alphanumeric "^1.0.0" 292 | is-decimal "^1.0.0" 293 | is-whitespace-character "^1.0.0" 294 | longest-streak "^2.0.1" 295 | markdown-escapes "^1.0.0" 296 | markdown-table "^1.1.0" 297 | mdast-util-compact "^1.0.0" 298 | parse-entities "^1.0.2" 299 | repeat-string "^1.5.4" 300 | state-toggle "^1.0.0" 301 | stringify-entities "^2.0.0" 302 | unherit "^1.0.4" 303 | xtend "^4.0.1" 304 | 305 | remark-wiki-link@^0.0.4: 306 | version "0.0.4" 307 | resolved "https://registry.yarnpkg.com/remark-wiki-link/-/remark-wiki-link-0.0.4.tgz#9af79538714280513f209661794083d5ae3006d7" 308 | integrity sha512-Mmd5TspUWTnt+gafIdUtczHsjZY21XYEI9BeR6HMLKv/pUiNa5tDSWSjiPMvx07DlD4OmSM+tIhhk7SQXV3LrA== 309 | dependencies: 310 | "@babel/runtime" "^7.4.4" 311 | unist-util-map "^1.0.3" 312 | 313 | remark@^11.0.1: 314 | version "11.0.2" 315 | resolved "https://registry.yarnpkg.com/remark/-/remark-11.0.2.tgz#12b90ea100ac3362b1976fa87a6e4e0ab5968202" 316 | integrity sha512-bh+eJgn8wgmbHmIBOuwJFdTVRVpl3fcVP6HxmpPWO0ULGP9Qkh6INJh0N5Uy7GqlV7DQYGoqaKiEIpM5LLvJ8w== 317 | dependencies: 318 | remark-parse "^7.0.0" 319 | remark-stringify "^7.0.0" 320 | unified "^8.2.0" 321 | 322 | remark@^5.0.1: 323 | version "5.1.0" 324 | resolved "https://registry.yarnpkg.com/remark/-/remark-5.1.0.tgz#cb463bd3dbcb4b99794935eee1cf71d7a8e3068c" 325 | integrity sha1-y0Y709vLS5l5STXu4c9x16jjBow= 326 | dependencies: 327 | remark-parse "^1.1.0" 328 | remark-stringify "^1.1.0" 329 | unified "^4.1.1" 330 | 331 | repeat-string@^1.5.4: 332 | version "1.6.1" 333 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 334 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 335 | 336 | replace-ext@1.0.0: 337 | version "1.0.0" 338 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" 339 | integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= 340 | 341 | source-map-support@^0.5.6: 342 | version "0.5.16" 343 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" 344 | integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== 345 | dependencies: 346 | buffer-from "^1.0.0" 347 | source-map "^0.6.0" 348 | 349 | source-map@^0.6.0: 350 | version "0.6.1" 351 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 352 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 353 | 354 | state-toggle@^1.0.0: 355 | version "1.0.2" 356 | resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc" 357 | integrity sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw== 358 | 359 | stringify-entities@^1.0.1: 360 | version "1.3.2" 361 | resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" 362 | integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== 363 | dependencies: 364 | character-entities-html4 "^1.0.0" 365 | character-entities-legacy "^1.0.0" 366 | is-alphanumerical "^1.0.0" 367 | is-hexadecimal "^1.0.0" 368 | 369 | stringify-entities@^2.0.0: 370 | version "2.0.0" 371 | resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-2.0.0.tgz#fa7ca6614b355fb6c28448140a20c4ede7462827" 372 | integrity sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A== 373 | dependencies: 374 | character-entities-html4 "^1.0.0" 375 | character-entities-legacy "^1.0.0" 376 | is-alphanumerical "^1.0.0" 377 | is-decimal "^1.0.2" 378 | is-hexadecimal "^1.0.0" 379 | 380 | trim-trailing-lines@^1.0.0: 381 | version "1.1.2" 382 | resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a" 383 | integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q== 384 | 385 | trim@0.0.1: 386 | version "0.0.1" 387 | resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" 388 | integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= 389 | 390 | trough@^1.0.0: 391 | version "1.0.4" 392 | resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e" 393 | integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q== 394 | 395 | ts-node@^8.3.0: 396 | version "8.5.2" 397 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.5.2.tgz#434f6c893bafe501a30b32ac94ee36809ba2adce" 398 | integrity sha512-W1DK/a6BGoV/D4x/SXXm6TSQx6q3blECUzd5TN+j56YEMX3yPVMpHsICLedUw3DvGF3aTQ8hfdR9AKMaHjIi+A== 399 | dependencies: 400 | arg "^4.1.0" 401 | diff "^4.0.1" 402 | make-error "^1.1.1" 403 | source-map-support "^0.5.6" 404 | yn "^3.0.0" 405 | 406 | typescript@~3: 407 | version "3.7.2" 408 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" 409 | integrity sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ== 410 | 411 | unherit@^1.0.4: 412 | version "1.1.2" 413 | resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449" 414 | integrity sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w== 415 | dependencies: 416 | inherits "^2.0.1" 417 | xtend "^4.0.1" 418 | 419 | unified@^4.1.1: 420 | version "4.2.1" 421 | resolved "https://registry.yarnpkg.com/unified/-/unified-4.2.1.tgz#76ff43aa8da430f6e7e4a55c84ebac2ad2cfcd2e" 422 | integrity sha1-dv9Dqo2kMPbn5KVchOusKtLPzS4= 423 | dependencies: 424 | bail "^1.0.0" 425 | extend "^3.0.0" 426 | has "^1.0.1" 427 | once "^1.3.3" 428 | trough "^1.0.0" 429 | vfile "^1.0.0" 430 | 431 | unified@^8.2.0, unified@^8.4.0: 432 | version "8.4.2" 433 | resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" 434 | integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== 435 | dependencies: 436 | bail "^1.0.0" 437 | extend "^3.0.0" 438 | is-plain-obj "^2.0.0" 439 | trough "^1.0.0" 440 | vfile "^4.0.0" 441 | 442 | unist-util-find@^1.0.1: 443 | version "1.0.1" 444 | resolved "https://registry.yarnpkg.com/unist-util-find/-/unist-util-find-1.0.1.tgz#1062bbb6928c7a97c6adc89b53745d4c46c222a2" 445 | integrity sha1-EGK7tpKMepfGrcibU3RdTEbCIqI= 446 | dependencies: 447 | lodash.iteratee "^4.5.0" 448 | remark "^5.0.1" 449 | unist-util-visit "^1.1.0" 450 | 451 | unist-util-is@^3.0.0: 452 | version "3.0.0" 453 | resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" 454 | integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== 455 | 456 | unist-util-is@^4.0.0: 457 | version "4.0.1" 458 | resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.1.tgz#ae3e39b9ad1b138c8e3b9d2f4658ad0031be4610" 459 | integrity sha512-7NYjErP4LJtkEptPR22wO5RsCPnHZZrop7t2SoQzjvpFedCFer4WW8ujj9GI5DkUX7yVcffXLjoURf6h2QUv6Q== 460 | 461 | unist-util-map@^1.0.3: 462 | version "1.0.5" 463 | resolved "https://registry.yarnpkg.com/unist-util-map/-/unist-util-map-1.0.5.tgz#701069b72e1d1cc02db265502a5e82b77c2eb8b7" 464 | integrity sha512-dFil/AN6vqhnQWNCZk0GF/G3+Q5YwsB+PqjnzvpO2wzdRtUJ1E8PN+XRE/PRr/G3FzKjRTJU0haqE0Ekl+O3Ag== 465 | dependencies: 466 | object-assign "^4.0.1" 467 | 468 | unist-util-remove-position@^1.0.0: 469 | version "1.1.4" 470 | resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" 471 | integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== 472 | dependencies: 473 | unist-util-visit "^1.1.0" 474 | 475 | unist-util-stringify-position@^2.0.0: 476 | version "2.0.2" 477 | resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz#5a3866e7138d55974b640ec69a94bc19e0f3fa12" 478 | integrity sha512-nK5n8OGhZ7ZgUwoUbL8uiVRwAbZyzBsB/Ddrlbu6jwwubFza4oe15KlyEaLNMXQW1svOQq4xesUeqA85YrIUQA== 479 | dependencies: 480 | "@types/unist" "^2.0.2" 481 | 482 | unist-util-visit-parents@^2.0.0: 483 | version "2.1.2" 484 | resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" 485 | integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== 486 | dependencies: 487 | unist-util-is "^3.0.0" 488 | 489 | unist-util-visit-parents@^3.0.1: 490 | version "3.0.1" 491 | resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.0.1.tgz#666883dc8684c6eec04a7e9781cdcd8b4888319f" 492 | integrity sha512-umEOTkm6/y1gIqPrqet55mYqlvGXCia/v1FSc5AveLAI7jFmOAIbqiwcHcviLcusAkEQt1bq2hixCKO9ltMb2Q== 493 | dependencies: 494 | "@types/unist" "^2.0.0" 495 | unist-util-is "^4.0.0" 496 | 497 | unist-util-visit@^1.1.0: 498 | version "1.4.1" 499 | resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" 500 | integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== 501 | dependencies: 502 | unist-util-visit-parents "^2.0.0" 503 | 504 | vfile-location@^2.0.0: 505 | version "2.0.6" 506 | resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" 507 | integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== 508 | 509 | vfile-message@^2.0.0: 510 | version "2.0.2" 511 | resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.2.tgz#75ba05090ec758fa8420f2c11ce049bcddd8cf3e" 512 | integrity sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA== 513 | dependencies: 514 | "@types/unist" "^2.0.0" 515 | unist-util-stringify-position "^2.0.0" 516 | 517 | vfile@^1.0.0: 518 | version "1.4.0" 519 | resolved "https://registry.yarnpkg.com/vfile/-/vfile-1.4.0.tgz#c0fd6fa484f8debdb771f68c31ed75d88da97fe7" 520 | integrity sha1-wP1vpIT43r23cfaMMe112I2pf+c= 521 | 522 | vfile@^4.0.0: 523 | version "4.0.2" 524 | resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.0.2.tgz#71af004d4a710b0e6be99c894655bc56126d5d56" 525 | integrity sha512-yhoTU5cDMSsaeaMfJ5g0bUKYkYmZhAh9fn9TZicxqn+Cw4Z439il2v3oT9S0yjlpqlI74aFOQCt3nOV+pxzlkw== 526 | dependencies: 527 | "@types/unist" "^2.0.0" 528 | is-buffer "^2.0.0" 529 | replace-ext "1.0.0" 530 | unist-util-stringify-position "^2.0.0" 531 | vfile-message "^2.0.0" 532 | 533 | wrappy@1: 534 | version "1.0.2" 535 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 536 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 537 | 538 | xtend@^4.0.1: 539 | version "4.0.2" 540 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 541 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 542 | 543 | yn@^3.0.0: 544 | version "3.1.1" 545 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 546 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 547 | --------------------------------------------------------------------------------