├── .nvmrc
├── .editorconfig
├── rollup.config.js
├── lerna.json
├── .travis.yml
├── test
├── utils.js
├── test_duplicates.js
└── test_alive.js
├── packages
├── core
│ ├── CHANGELOG.md
│ ├── package.json
│ ├── README.md
│ ├── src.js
│ └── yarn.lock
├── duplicate
│ ├── package.json
│ ├── src.js
│ ├── CHANGELOG.md
│ └── README.md
└── alive
│ ├── package.json
│ ├── src.js
│ ├── CHANGELOG.md
│ ├── README.md
│ └── yarn.lock
├── README.md
├── LICENSE.md
├── CONTRIBUTING.md
├── .gitignore
└── package.json
/.nvmrc:
--------------------------------------------------------------------------------
1 | v8.2.1
2 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | end_of_line = lf
5 | insert_final_newline = true
6 | trim_trailing_whitespace = true
7 | charset = utf-8
8 | indent_style = space
9 | indent_size = 2
10 |
11 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | const commonjs = require('rollup-plugin-commonjs')
2 | const babel = require('rollup-plugin-babel')
3 |
4 | module.exports = {
5 | format: 'cjs',
6 | plugins: [
7 | commonjs(),
8 | babel({
9 | exclude: 'node_modules/**'
10 | })
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/lerna.json:
--------------------------------------------------------------------------------
1 | {
2 | "lerna": "2.0.0",
3 | "packages": [
4 | "packages/*"
5 | ],
6 | "command": {
7 | "publish": {
8 | "ignore": [
9 | "node_modules",
10 | "src.js"
11 | ]
12 | }
13 | },
14 | "conventionalCommits": true,
15 | "npmClient": "yarn",
16 | "version": "independent"
17 | }
18 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 |
3 | sudo: false
4 |
5 | cache:
6 | directories:
7 | - node_modules
8 |
9 | node_js:
10 | - 7
11 | - 8
12 |
13 | install:
14 | - npm install -g yarn lerna
15 | - yarn install
16 |
17 | script:
18 | - yarn coveralls
19 |
20 | notifications:
21 | email:
22 | on_success: never
23 | on_failure: change
24 |
--------------------------------------------------------------------------------
/test/utils.js:
--------------------------------------------------------------------------------
1 | const remark = require('remark')
2 | const remarkLint = require('remark-lint')
3 | const dedent = require('dedent')
4 |
5 | // Utils:
6 |
7 | const lintFabric = (middleware) => {
8 | return (md, options) => {
9 | return remark()
10 | .use(remarkLint)
11 | .use(middleware, options)
12 | .process(dedent(md))
13 | }
14 | }
15 |
16 | module.exports = lintFabric
17 |
--------------------------------------------------------------------------------
/packages/core/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
5 |
6 |
7 | ## [0.2.1](https://github.com/wemake-services/remark-lint-are-links-valid/compare/remark-lint-are-links-valid-core@0.2.0...remark-lint-are-links-valid-core@0.2.1) (2017-08-07)
8 |
9 |
10 |
11 |
12 |
13 | # [0.2.0](https://github.com/wemake-services/remark-lint-are-links-valid/compare/remark-lint-are-links-valid-core@0.1.0...remark-lint-are-links-valid-core@0.2.0) (2017-08-07)
14 |
15 |
16 | ### Features
17 |
18 | * **documentation:** adds README for every package ([c56bbd8](https://github.com/wemake-services/remark-lint-are-links-valid/commit/c56bbd8))
19 |
--------------------------------------------------------------------------------
/packages/duplicate/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "remark-lint-are-links-valid-duplicate",
3 | "version": "0.2.2",
4 | "description": "Checks if links are unique",
5 | "main": "index.js",
6 | "scripts": {
7 | "build": "../../node_modules/.bin/rollup -c ../../rollup.config.js -i src.js -o index.js"
8 | },
9 | "dependencies": {
10 | "remark-lint-are-links-valid-core": "^0.2.1"
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "git+https://github.com/wemake-services/remark-lint-are-links-valid.git"
15 | },
16 | "keywords": [
17 | "remark",
18 | "remark-lint",
19 | "links",
20 | "validation",
21 | "markdown"
22 | ],
23 | "author": "Nikita Sobolev",
24 | "license": "MIT",
25 | "bugs": {
26 | "url": "https://github.com/wemake-services/remark-lint-are-links-valid/issues"
27 | },
28 | "homepage": "https://github.com/wemake-services/remark-lint-are-links-valid#readme"
29 | }
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # remark-lint-are-links-valid
2 |
3 | [](https://travis-ci.org/wemake-services/remark-lint-are-links-valid) [](https://coveralls.io/github/wemake-services/remark-lint-are-links-valid?branch=master) [](http://commitizen.github.io/cz-cli/)
4 |
5 | > Make your links to follow your rules!
6 |
7 | ## Installation
8 |
9 | Install only packages you need. See `packages/*` folder.
10 |
11 | Here are the list of rules:
12 | 1. `remark-lint-are-links-valid-duplicate` - checks that link is unique on a page
13 | 2. `remark-lint-are-links-valid-alive` - checks that link is reachable
14 |
15 |
16 | ## License
17 |
18 | MIT, see [LICENSE.md](LICENSE.md) for details.
19 |
--------------------------------------------------------------------------------
/packages/alive/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "remark-lint-are-links-valid-alive",
3 | "version": "0.3.0",
4 | "description": "Checks if links are still alive",
5 | "main": "index.js",
6 | "scripts": {
7 | "build": "../../node_modules/.bin/rollup -c ../../rollup.config.js -i src.js -o index.js"
8 | },
9 | "dependencies": {
10 | "broken-link-checker": "^0.7.6",
11 | "remark-lint-are-links-valid-core": "^0.2.1"
12 | },
13 | "repository": {
14 | "type": "git",
15 | "url": "git+https://github.com/wemake-services/remark-lint-are-links-valid.git"
16 | },
17 | "keywords": [
18 | "remark",
19 | "remark-lint",
20 | "links",
21 | "validation",
22 | "markdown"
23 | ],
24 | "author": "Nikita Sobolev",
25 | "license": "MIT",
26 | "bugs": {
27 | "url": "https://github.com/wemake-services/remark-lint-are-links-valid/issues"
28 | },
29 | "homepage": "https://github.com/wemake-services/remark-lint-are-links-valid#readme"
30 | }
31 |
--------------------------------------------------------------------------------
/packages/core/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "remark-lint-are-links-valid-core",
3 | "version": "0.2.1",
4 | "description": "Checks if links are valid",
5 | "main": "index.js",
6 | "scripts": {
7 | "build": "../../node_modules/.bin/rollup -c ../../rollup.config.js -i src.js -o index.js"
8 | },
9 | "dependencies": {
10 | "object.defaults": "^1.1.0",
11 | "unified-lint-rule": "^1.0.1",
12 | "unist-util-visit": "^1.1.3"
13 | },
14 | "repository": {
15 | "type": "git",
16 | "url": "git+https://github.com/wemake-services/remark-lint-are-links-valid.git"
17 | },
18 | "keywords": [
19 | "remark",
20 | "remark-lint",
21 | "links",
22 | "validation",
23 | "markdown"
24 | ],
25 | "author": "Nikita Sobolev",
26 | "license": "MIT",
27 | "bugs": {
28 | "url": "https://github.com/wemake-services/remark-lint-are-links-valid/issues"
29 | },
30 | "homepage": "https://github.com/wemake-services/remark-lint-are-links-valid#readme"
31 | }
32 |
--------------------------------------------------------------------------------
/packages/core/README.md:
--------------------------------------------------------------------------------
1 | # remark-lint-are-links-valid-core
2 |
3 | [](https://travis-ci.org/wemake-services/remark-lint-are-links-valid) [](https://coveralls.io/github/wemake-services/remark-lint-are-links-valid?branch=master) [](http://commitizen.github.io/cz-cli/)
4 |
5 | > Make your links to follow your rules!
6 |
7 |
8 | ## Usage
9 |
10 | Should not be used directly.
11 |
12 |
13 | ## Changelog
14 |
15 | Follows `semver` and `conventional-commits`. See [CHANGELOG.md](CHANGELOG.md).
16 |
17 |
18 | ## License
19 |
20 | MIT, see [LICENSE.md](LICENCE.md) for details.
21 |
22 |
23 | ## Part of a bigger family
24 |
25 | This project is a part of [remark-lint-are-links-valid](https://github.com/wemake-services/remark-lint-are-links-valid)
26 |
--------------------------------------------------------------------------------
/packages/duplicate/src.js:
--------------------------------------------------------------------------------
1 | const main = require('remark-lint-are-links-valid-core')
2 |
3 | function handleLinkDuplicateError (file, link) {
4 | const message = `Link is a duplicate: ${link.link.href}`
5 | const {node} = link
6 |
7 | file.info(message, node)
8 | }
9 |
10 | function checkDubplicates (file, links, settings) {
11 | const duplicates = []
12 | const valid = {}
13 |
14 | links.map((link) => {
15 | const url = `${link.link.host}${link.link.path}`
16 | if (!(url in valid)) {
17 | valid[url] = link
18 | } else if (
19 | settings.whiteListDomains.indexOf(link.link.host) === -1
20 | ) {
21 | duplicates.push(link)
22 | }
23 | })
24 |
25 | duplicates.map((item) => handleLinkDuplicateError(file, item))
26 | }
27 |
28 | function areLinksDuplicate (ast, file, options) {
29 | const links = main.findLinks(ast)
30 | const settings = main.getSettings(options)
31 |
32 | checkDubplicates(file, links, settings)
33 | }
34 |
35 | module.exports = main.createRule('duplicates', areLinksDuplicate)
36 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 | Copyright (c) 2016 wemake.service company
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
5 |
6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7 |
8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/packages/duplicate/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
5 |
6 |
7 | ## [0.2.2](https://github.com/wemake-services/remark-lint-are-links-valid/compare/remark-lint-are-links-valid-duplicate@0.2.1...remark-lint-are-links-valid-duplicate@0.2.2) (2017-12-10)
8 |
9 |
10 |
11 |
12 |
13 | ## [0.2.1](https://github.com/wemake-services/remark-lint-are-links-valid/compare/remark-lint-are-links-valid-duplicate@0.2.0...remark-lint-are-links-valid-duplicate@0.2.1) (2017-08-07)
14 |
15 |
16 |
17 |
18 |
19 | # [0.2.0](https://github.com/wemake-services/remark-lint-are-links-valid/compare/remark-lint-are-links-valid-duplicate@0.1.1...remark-lint-are-links-valid-duplicate@0.2.0) (2017-08-07)
20 |
21 |
22 | ### Features
23 |
24 | * **documentation:** adds README for every package ([c56bbd8](https://github.com/wemake-services/remark-lint-are-links-valid/commit/c56bbd8))
25 |
--------------------------------------------------------------------------------
/packages/core/src.js:
--------------------------------------------------------------------------------
1 | // Basic logics for all packages.
2 |
3 | const url = require('url')
4 |
5 | const rule = require('unified-lint-rule')
6 | const visit = require('unist-util-visit')
7 | const defaults = require('object.defaults')
8 |
9 | const findLinks = (ast) => {
10 | const links = []
11 |
12 | visit(ast, 'link', (node) => {
13 | const link = url.parse(node.url)
14 | if (link.host !== null) { // links without `host` are just `#hashes`
15 | links.push({node, link})
16 | }
17 | })
18 |
19 | return links
20 | }
21 |
22 | const getSettings = (options) => {
23 | const defaultSettings = {
24 | // These settings allow duplicate links validation:
25 | allowDuplicates: false,
26 | whiteListDomains: []
27 | }
28 | const settings = options || {}
29 | defaults(settings, defaultSettings)
30 |
31 | return settings
32 | }
33 |
34 | const createRule = (name, callback) => {
35 | return rule(
36 | `remark-lint:are-links-valid:${name}`,
37 | callback
38 | )
39 | }
40 |
41 | export default {
42 | findLinks,
43 | getSettings,
44 | createRule
45 | }
46 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing toremark-are-links-valid
2 |
3 |
4 | ## Pull Requests Welcome
5 |
6 | 1. Fork `remark-are-links-valid`
7 | 2. Create a topic branch
8 | 3. Use `commitizen` to commit your changes, simply run `yarn commit` instead of `git commit`
9 | 4. Push commits to your fork
10 | 5. Open a pull request against `remark-are-links-valid/master`
11 |
12 |
13 | ## Bootstrap
14 |
15 | You will need to follow several step to setup development environment:
16 |
17 | 0. Install `nvm` and run `nvm install && nvm use` to install and activate our `node` version (you can skip this step if versions already match)
18 | 1. Install `yarn` and `lerna` with `npm install -g yarn lerna`
19 | 2. Run `yarn install && yarn build`
20 |
21 |
22 | ## Development
23 |
24 | This repository follows `conventional-commits`, please make sure you document your changes properly.
25 |
26 | Please, make sure that all these commands succeed before pushing anything:
27 |
28 | 1. `yarn test`
29 |
30 |
31 | ## Issues
32 |
33 | If you believe there to be a bug, please provide the maintainers with enough
34 | detail to reproduce or a link to an app exhibiting unexpected behavior. For
35 | help, please start with Stack Overflow.
36 |
--------------------------------------------------------------------------------
/packages/alive/src.js:
--------------------------------------------------------------------------------
1 | const blc = require('broken-link-checker')
2 | const main = require('remark-lint-are-links-valid-core')
3 |
4 | function handleLinkDuplicateError (file, link, reason) {
5 | const message = `Link ${link.link.href} is not responding: ${reason}`
6 | const {node} = link
7 |
8 | file.info(message, node)
9 | }
10 |
11 | function findCheckableLinks (ast) {
12 | const ignoredSchemes = [
13 | 'data:',
14 | 'geo:',
15 | 'irc:',
16 | 'mailto:',
17 | 'sms:',
18 | 'tel:'
19 | ]
20 |
21 | return main.findLinks(ast).filter(link => {
22 | return ignoredSchemes.indexOf(link.link.protocol) === -1
23 | })
24 | }
25 |
26 | function areLinksAlive (ast, file, options, done) {
27 | const links = findCheckableLinks(ast)
28 | const settings = main.getSettings(options)
29 |
30 | const urlChecker = new blc.UrlChecker(settings, {
31 | link: (result, data) => {
32 | if (result.broken) {
33 | handleLinkDuplicateError(file, data, result.brokenReason)
34 | }
35 | },
36 | end: () => done()
37 | })
38 |
39 | if (links.length === 0) {
40 | // There are no links to handle:
41 | done()
42 | return
43 | }
44 |
45 | links.map((link) => {
46 | urlChecker.enqueue(link.link.href, null, link)
47 | })
48 | }
49 |
50 | module.exports = main.createRule('alive', areLinksAlive)
51 |
--------------------------------------------------------------------------------
/packages/alive/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
5 |
6 |
7 | # [0.3.0](https://github.com/wemake-services/remark-lint-are-links-valid/compare/remark-lint-are-links-valid-alive@0.2.1...remark-lint-are-links-valid-alive@0.3.0) (2017-12-10)
8 |
9 |
10 | ### Bug Fixes
11 |
12 | * skip links for schemes that can't be checked ([6b97bcf](https://github.com/wemake-services/remark-lint-are-links-valid/commit/6b97bcf))
13 |
14 |
15 | ### Features
16 |
17 | * **commit:** adds commitizen into scripts ([7cac9d3](https://github.com/wemake-services/remark-lint-are-links-valid/commit/7cac9d3))
18 |
19 |
20 |
21 |
22 |
23 | ## [0.2.1](https://github.com/wemake-services/remark-lint-are-links-valid/compare/remark-lint-are-links-valid-alive@0.2.0...remark-lint-are-links-valid-alive@0.2.1) (2017-08-07)
24 |
25 |
26 |
27 |
28 |
29 | # [0.2.0](https://github.com/wemake-services/remark-lint-are-links-valid/compare/remark-lint-are-links-valid-alive@0.1.1...remark-lint-are-links-valid-alive@0.2.0) (2017-08-07)
30 |
31 |
32 | ### Features
33 |
34 | * **documentation:** adds README for every package ([c56bbd8](https://github.com/wemake-services/remark-lint-are-links-valid/commit/c56bbd8))
35 |
--------------------------------------------------------------------------------
/packages/duplicate/README.md:
--------------------------------------------------------------------------------
1 | # remark-lint-are-links-valid-duplicate
2 |
3 | [](https://travis-ci.org/wemake-services/remark-lint-are-links-valid) [](https://coveralls.io/github/wemake-services/remark-lint-are-links-valid?branch=master) [](http://commitizen.github.io/cz-cli/)
4 |
5 | > Make your links to follow your rules!
6 |
7 |
8 | ## Installation
9 |
10 | ```bash
11 | npm install remark-lint-are-links-valid-duplicate # or yarn
12 | ```
13 |
14 |
15 | ## Usage
16 |
17 | Add `remark-lint-are-links-valid-duplicate` to `remark`'s [configuration](https://github.com/wooorm/remark/tree/master/packages/remark-cli):
18 |
19 | ```json
20 | {
21 | "plugins": [
22 | ...
23 | "remark-lint-are-links-valid-duplicate"
24 | ]
25 | }
26 | ```
27 |
28 |
29 | ## Options
30 |
31 | - `whiteListDomains` - this option will allow duplicate links for specified domains, default: `[]`
32 |
33 |
34 | ## Changelog
35 |
36 | Follows `semver` and `conventional-commits`. See [CHANGELOG.md](CHANGELOG.md).
37 |
38 |
39 | ## License
40 |
41 | MIT, see [LICENSE.md](LICENCE.md) for details.
42 |
43 |
44 | ## Part of a bigger family
45 |
46 | This project is a part of [remark-lint-are-links-valid](https://github.com/wemake-services/remark-lint-are-links-valid)
47 |
--------------------------------------------------------------------------------
/packages/alive/README.md:
--------------------------------------------------------------------------------
1 | # remark-lint-are-links-valid-alive
2 |
3 | [](https://travis-ci.org/wemake-services/remark-lint-are-links-valid) [](https://coveralls.io/github/wemake-services/remark-lint-are-links-valid?branch=master) [](http://commitizen.github.io/cz-cli/)
4 |
5 | > Make your links to follow to your rules!
6 |
7 |
8 | ## Installation
9 |
10 | ```bash
11 | npm install remark-lint-are-links-valid-alive # or yarn
12 | ```
13 |
14 |
15 | ## Usage
16 |
17 | Add `remark-lint-are-links-valid-alive` to `remark`'s [configuration](https://github.com/wooorm/remark/tree/master/packages/remark-cli):
18 |
19 | ```json
20 | {
21 | "plugins": [
22 | ...
23 | "remark-lint-are-links-valid-alive"
24 | ]
25 | }
26 | ```
27 |
28 |
29 | ## Options
30 |
31 | `remark-lint-are-links-valid-alive` uses [`broken-link-checker`](https://www.npmjs.com/package/broken-link-checker) internally. So you can pass any its [options](https://www.npmjs.com/package/broken-link-checker#options) to `remark-lint-are-links-valid-alive`.
32 |
33 | Note, that this plugin will skip [unsupported](https://github.com/wemake-services/remark-lint-are-links-valid/blob/master/packages/alive/src.js#L13) URL schemes.
34 |
35 |
36 | ## Changelog
37 |
38 | Follows `semver` and `conventional-commits`. See [CHANGELOG.md](CHANGELOG.md).
39 |
40 |
41 | ## License
42 |
43 | MIT, see [LICENSE.md](LICENCE.md) for details.
44 |
45 |
46 | ## Part of a bigger family
47 |
48 | This project is a part of [remark-lint-are-links-valid](https://github.com/wemake-services/remark-lint-are-links-valid)
49 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | #### joe made this: http://goel.io/joe
2 |
3 | #####=== OSX ===#####
4 | .DS_Store
5 | .AppleDouble
6 | .LSOverride
7 |
8 | # Icon must end with two \r
9 | Icon
10 |
11 |
12 | # Thumbnails
13 | ._*
14 |
15 | # Files that might appear in the root of a volume
16 | .DocumentRevisions-V100
17 | .fseventsd
18 | .Spotlight-V100
19 | .TemporaryItems
20 | .Trashes
21 | .VolumeIcon.icns
22 |
23 | # Directories potentially created on remote AFP share
24 | .AppleDB
25 | .AppleDesktop
26 | Network Trash Folder
27 | Temporary Items
28 | .apdisk
29 |
30 | #####=== Windows ===#####
31 | # Windows image file caches
32 | Thumbs.db
33 | ehthumbs.db
34 |
35 | # Folder config file
36 | Desktop.ini
37 |
38 | # Recycle Bin used on file shares
39 | $RECYCLE.BIN/
40 |
41 | # Windows Installer files
42 | *.cab
43 | *.msi
44 | *.msm
45 | *.msp
46 |
47 | # Windows shortcuts
48 | *.lnk
49 |
50 | #####=== Linux ===#####
51 | *~
52 |
53 | # KDE directory preferences
54 | .directory
55 |
56 | # Linux trash folder which might appear on any partition or disk
57 | .Trash-*
58 |
59 | #####=== Node ===#####
60 |
61 | # Logs
62 | logs
63 | *.log
64 |
65 | # Runtime data
66 | pids
67 | *.pid
68 | *.seed
69 |
70 | # Directory for instrumented libs generated by jscoverage/JSCover
71 | lib-cov
72 |
73 | # Coverage directory used by tools like istanbul
74 | coverage
75 |
76 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
77 | .grunt
78 |
79 | # node-waf configuration
80 | .lock-wscript
81 |
82 | # Compiled binary addons (http://nodejs.org/api/addons.html)
83 | build/Release
84 |
85 | # Dependency directory
86 | # https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
87 | node_modules
88 |
89 | #####=== Custom ===#####
90 |
91 | # This files are built by babel:
92 | dist/
93 | packages/*/index.js
94 |
95 | # Coverage:
96 | .nyc_output
97 |
--------------------------------------------------------------------------------
/test/test_duplicates.js:
--------------------------------------------------------------------------------
1 | /* global describe it */
2 |
3 | const chai = require('chai')
4 | const chaiAsPromised = require('chai-as-promised')
5 | chai.use(chaiAsPromised)
6 | const expect = chai.expect
7 |
8 | const duplicate = require('../packages/duplicate')
9 | const lintFabric = require('./utils')
10 | const lint = lintFabric(duplicate)
11 |
12 | // Test cases:
13 |
14 | describe('Are there duplicate links', () => {
15 | describe('No links situation', () => {
16 | it(`Expect no warnings`, (done) => {
17 | const result = lint(`
18 | Hello world!
19 | There is no problem there, because there're no links
20 | `)
21 |
22 | expect(result).to.eventually.have
23 | .property('messages').lengthOf(0)
24 | .notify(done)
25 | })
26 | })
27 |
28 | describe('Testing plugin with duplicated links', () => {
29 | const markdown = `
30 | [First duplicated link](https://github.com/wemake-services/remark-lint-are-links-valid)
31 | [Second duplicted link](https://github.com/wemake-services/remark-lint-are-links-valid)
32 | `
33 |
34 | it('Expect warnings with default settings', () => {
35 | const result = lint(markdown)
36 |
37 | return expect(result).to.eventually.have
38 | .property('messages').lengthOf(1)
39 | })
40 |
41 | it('Expect no warnings with `whiteListDomains` setting', () => {
42 | const result = lint(markdown, {whiteListDomains: ['github.com']})
43 |
44 | return expect(result).to.eventually.have
45 | .property('messages').lengthOf(0)
46 | })
47 | })
48 |
49 | describe('Hash links situation', () => {
50 | it(`Expect no warnings`, (done) => {
51 | const result = lint(`
52 | # Test
53 | [Link](#test)
54 | [Duplicate Link](#test)
55 | `)
56 |
57 | expect(result).to.eventually.have
58 | .property('messages').lengthOf(0)
59 | .notify(done)
60 | })
61 | })
62 | })
63 |
--------------------------------------------------------------------------------
/packages/core/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | array-each@^1.0.1:
6 | version "1.0.1"
7 | resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
8 |
9 | array-slice@^1.0.0:
10 | version "1.0.0"
11 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.0.0.tgz#e73034f00dcc1f40876008fd20feae77bd4b7c2f"
12 |
13 | co@3.1.0:
14 | version "3.1.0"
15 | resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78"
16 |
17 | for-in@^1.0.1:
18 | version "1.0.2"
19 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
20 |
21 | for-own@^1.0.0:
22 | version "1.0.0"
23 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
24 | dependencies:
25 | for-in "^1.0.1"
26 |
27 | isobject@^3.0.0:
28 | version "3.0.1"
29 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
30 |
31 | object.defaults@^1.1.0:
32 | version "1.1.0"
33 | resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
34 | dependencies:
35 | array-each "^1.0.1"
36 | array-slice "^1.0.0"
37 | for-own "^1.0.0"
38 | isobject "^3.0.0"
39 |
40 | sliced@^1.0.1:
41 | version "1.0.1"
42 | resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
43 |
44 | unified-lint-rule@^1.0.1:
45 | version "1.0.1"
46 | resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-1.0.1.tgz#1bf733d40e667bf1915c7156a83663ed00666c57"
47 | dependencies:
48 | wrapped "^1.0.1"
49 |
50 | unist-util-visit@^1.1.3:
51 | version "1.1.3"
52 | resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.1.3.tgz#ec268e731b9d277a79a5b5aa0643990e405d600b"
53 |
54 | wrapped@^1.0.1:
55 | version "1.0.1"
56 | resolved "https://registry.yarnpkg.com/wrapped/-/wrapped-1.0.1.tgz#c783d9d807b273e9b01e851680a938c87c907242"
57 | dependencies:
58 | co "3.1.0"
59 | sliced "^1.0.1"
60 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "remark-lint-are-links-valid",
3 | "version": "0.0.0-development",
4 | "description": "This package allows to check either a link points to the existing resource.",
5 | "author": "Nikita Sobolev ",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/wemake-services/remark-lint-are-links-valid.git"
9 | },
10 | "files": [
11 | "lib",
12 | "dist",
13 | "test"
14 | ],
15 | "license": "MIT",
16 | "scripts": {
17 | "build": "lerna bootstrap && lerna run build",
18 | "coveralls": "npm run test && cat ./coverage/lcov.info | ./node_modules/.bin/coveralls",
19 | "test:code": "cross-env NODE_ENV=test nyc mocha && nyc report --reporter=lcov",
20 | "test": "npm run build && npm run test:code && npm run lint",
21 | "lint": "eslint test/ packages/*/src.js",
22 | "commit": "git-cz"
23 | },
24 | "eslintConfig": {
25 | "extends": "standard"
26 | },
27 | "eslintIgnore": [
28 | "packages/*/index.js"
29 | ],
30 | "babel": {
31 | "presets": [
32 | [
33 | "es2015",
34 | {
35 | "modules": false
36 | }
37 | ]
38 | ],
39 | "plugins": [
40 | "external-helpers"
41 | ]
42 | },
43 | "devDependencies": {
44 | "babel-cli": "^6.24.1",
45 | "babel-core": "^6.25.0",
46 | "babel-eslint": "^8.0.2",
47 | "babel-plugin-external-helpers": "^6.22.0",
48 | "babel-preset-es2015": "^6.24.1",
49 | "chai": "^4.1.1",
50 | "chai-as-promised": "^7.1.1",
51 | "commitizen": "^2.9.6",
52 | "coveralls": "^2.13.1",
53 | "cross-env": "^5.1.1",
54 | "cz-lerna-changelog": "^1.2.1",
55 | "dedent": "^0.7.0",
56 | "eslint": "^4.10.0",
57 | "eslint-config-standard": "^10.2.1",
58 | "eslint-plugin-import": "^2.8.0",
59 | "eslint-plugin-node": "^5.1.1",
60 | "eslint-plugin-promise": "^3.6.0",
61 | "eslint-plugin-standard": "^3.0.1",
62 | "lerna": "^2.0.0",
63 | "mocha": "^4.0.1",
64 | "mocha-lcov-reporter": "^1.3.0",
65 | "nyc": "^11.3.0",
66 | "remark": "^8.0.0",
67 | "remark-lint": "^6.0.1",
68 | "rollup": "^0.51.5",
69 | "rollup-plugin-babel": "^2.7.1",
70 | "rollup-plugin-commonjs": "^8.2.6"
71 | },
72 | "bugs": {
73 | "url": "https://github.com/wemake-services/remark-lint-are-links-valid/issues"
74 | },
75 | "homepage": "https://github.com/wemake-services/remark-lint-are-links-valid",
76 | "config": {
77 | "commitizen": {
78 | "path": "./node_modules/cz-lerna-changelog"
79 | }
80 | },
81 | "dependencies": {}
82 | }
83 |
--------------------------------------------------------------------------------
/test/test_alive.js:
--------------------------------------------------------------------------------
1 | /* global describe it */
2 |
3 | const chai = require('chai')
4 | const chaiAsPromised = require('chai-as-promised')
5 | chai.use(chaiAsPromised)
6 | const expect = chai.expect
7 |
8 | const alive = require('../packages/alive')
9 | const lintFabric = require('./utils')
10 | const lint = lintFabric(alive)
11 |
12 | // Test cases:
13 |
14 | describe('Are links alive', () => {
15 | describe('No links situation', () => {
16 | it(`Expect no warnings`, (done) => {
17 | const result = lint(`
18 | Hello world!
19 | There is no problem there, because there're no links
20 | `)
21 |
22 | expect(result).to.eventually.have
23 | .property('messages').lengthOf(0)
24 | .notify(done)
25 | })
26 | })
27 |
28 | describe('Broken links', () => {
29 | it(`Expect 404 warning`, (done) => {
30 | const result = lint(`
31 | [Does not exist](http://wemake.services/broken)
32 | `)
33 |
34 | expect(result).to.eventually.have
35 | .property('messages').lengthOf(1)
36 | .notify(done)
37 | })
38 | })
39 |
40 | describe('Alive links', () => {
41 | it(`Expect no warnings on alive links`, (done) => {
42 | const result = lint(`
43 | [Exists](http://wemake.services)
44 | `)
45 |
46 | expect(result).to.eventually.have
47 | .property('messages').lengthOf(0)
48 | .notify(done)
49 | })
50 |
51 | it(`Expect no warnings on hash links`, (done) => {
52 | const result = lint(`
53 | # Test
54 | [Exists hash](#test)
55 | `)
56 |
57 | expect(result).to.eventually.have
58 | .property('messages').lengthOf(0)
59 | .notify(done)
60 | })
61 | })
62 |
63 | describe('Ignored schemes', () => {
64 | const ignoredURLs = [
65 | {scheme: 'data', link: 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='},
66 | {scheme: 'geo', link: 'geo:37.786971,-122.399677'},
67 | {scheme: 'irc', link: 'irc://irc.freenode.net/elixir-lang'},
68 | {scheme: 'mailto', link: 'mailto:contact@wemake.services'},
69 | {scheme: 'sms', link: 'sms:?body=Hello'},
70 | {scheme: 'tel', link: 'tel:1-408-555-5555'}
71 | ]
72 |
73 | ignoredURLs.forEach(({scheme, link}) => {
74 | it(`Expect no warnings on ${scheme} scheme`, (done) => {
75 | const result = lint(`
76 | # I sure do love links
77 | [${scheme} link](${link})
78 | `)
79 |
80 | expect(result).to.eventually.have
81 | .property('messages').lengthOf(0)
82 | .notify(done)
83 | })
84 | })
85 | })
86 | })
87 |
--------------------------------------------------------------------------------
/packages/alive/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@types/node@^6.0.46":
6 | version "6.0.85"
7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.85.tgz#ec02bfe54a61044f2be44f13b389c6a0e8ee05ae"
8 |
9 | abbrev@1:
10 | version "1.1.0"
11 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
12 |
13 | ansi-regex@^0.2.0, ansi-regex@^0.2.1:
14 | version "0.2.1"
15 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
16 |
17 | ansi-regex@^2.0.0:
18 | version "2.1.1"
19 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
20 |
21 | ansi-styles@^1.1.0:
22 | version "1.1.0"
23 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
24 |
25 | ansi-styles@^2.2.1:
26 | version "2.2.1"
27 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
28 |
29 | array-each@^1.0.1:
30 | version "1.0.1"
31 | resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
32 |
33 | array-slice@^1.0.0:
34 | version "1.1.0"
35 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4"
36 |
37 | bhttp@^1.2.1:
38 | version "1.2.4"
39 | resolved "https://registry.yarnpkg.com/bhttp/-/bhttp-1.2.4.tgz#fed0c24f765b35afc4940b08ab3214813e38f38f"
40 | dependencies:
41 | bluebird "^2.8.2"
42 | concat-stream "^1.4.7"
43 | debug "^2.1.1"
44 | dev-null "^0.1.1"
45 | errors "^0.2.0"
46 | extend "^2.0.0"
47 | form-data2 "^1.0.0"
48 | form-fix-array "^1.0.0"
49 | lodash "^2.4.1"
50 | stream-length "^1.0.2"
51 | string "^3.0.0"
52 | through2-sink "^1.0.0"
53 | through2-spy "^1.2.0"
54 | tough-cookie "^2.3.1"
55 |
56 | bluebird@^2.3.5, bluebird@^2.6.2, bluebird@^2.8.1, bluebird@^2.8.2:
57 | version "2.11.0"
58 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
59 |
60 | broken-link-checker@^0.7.6:
61 | version "0.7.6"
62 | resolved "https://registry.yarnpkg.com/broken-link-checker/-/broken-link-checker-0.7.6.tgz#94e3b4c814521104c4dab247d7e1a8dd14616093"
63 | dependencies:
64 | bhttp "^1.2.1"
65 | calmcard "~0.1.1"
66 | chalk "^1.1.3"
67 | char-spinner "^1.0.1"
68 | condense-whitespace "^1.0.0"
69 | default-user-agent "^1.0.0"
70 | errno "~0.1.4"
71 | extend "^3.0.0"
72 | http-equiv-refresh "^1.0.0"
73 | humanize-duration "^3.9.1"
74 | is-stream "^1.0.1"
75 | is-string "^1.0.4"
76 | limited-request-queue "^2.0.0"
77 | link-types "^1.1.0"
78 | maybe-callback "^2.1.0"
79 | nopter "~0.3.0"
80 | parse5 "^3.0.2"
81 | robot-directives "~0.3.0"
82 | robots-txt-guard "~0.1.0"
83 | robots-txt-parse "~0.0.4"
84 | urlcache "~0.6.0"
85 | urlobj "0.0.10"
86 |
87 | caller-path@~0.1.0:
88 | version "0.1.0"
89 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
90 | dependencies:
91 | callsites "^0.2.0"
92 |
93 | callsites@^0.2.0:
94 | version "0.2.0"
95 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
96 |
97 | calmcard@~0.1.1:
98 | version "0.1.1"
99 | resolved "https://registry.yarnpkg.com/calmcard/-/calmcard-0.1.1.tgz#35ac2b66492b0ed39ad06a893a0ff6e61124e449"
100 |
101 | camelcase@^1.0.2:
102 | version "1.2.1"
103 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
104 |
105 | chalk@^1.1.3:
106 | version "1.1.3"
107 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
108 | dependencies:
109 | ansi-styles "^2.2.1"
110 | escape-string-regexp "^1.0.2"
111 | has-ansi "^2.0.0"
112 | strip-ansi "^3.0.0"
113 | supports-color "^2.0.0"
114 |
115 | chalk@~0.5.1:
116 | version "0.5.1"
117 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174"
118 | dependencies:
119 | ansi-styles "^1.1.0"
120 | escape-string-regexp "^1.0.0"
121 | has-ansi "^0.1.0"
122 | strip-ansi "^0.3.0"
123 | supports-color "^0.2.0"
124 |
125 | char-spinner@^1.0.1:
126 | version "1.0.1"
127 | resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081"
128 |
129 | cli-table@~0.3.1:
130 | version "0.3.1"
131 | resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23"
132 | dependencies:
133 | colors "1.0.3"
134 |
135 | co@3.1.0:
136 | version "3.1.0"
137 | resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78"
138 |
139 | colors@1.0.3:
140 | version "1.0.3"
141 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
142 |
143 | combined-stream2@^1.0.2:
144 | version "1.1.2"
145 | resolved "https://registry.yarnpkg.com/combined-stream2/-/combined-stream2-1.1.2.tgz#f6e14b7a015666f8c7b0a1fac506240164ac3570"
146 | dependencies:
147 | bluebird "^2.8.1"
148 | debug "^2.1.1"
149 | stream-length "^1.0.1"
150 |
151 | concat-stream@^1.4.7:
152 | version "1.6.0"
153 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
154 | dependencies:
155 | inherits "^2.0.3"
156 | readable-stream "^2.2.2"
157 | typedarray "^0.0.6"
158 |
159 | condense-whitespace@^1.0.0:
160 | version "1.0.0"
161 | resolved "https://registry.yarnpkg.com/condense-whitespace/-/condense-whitespace-1.0.0.tgz#8376d98ef028e6cb2cd2468e28ce42c5c65ab1a9"
162 |
163 | core-util-is@~1.0.0:
164 | version "1.0.2"
165 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
166 |
167 | debug@^2.1.1:
168 | version "2.6.8"
169 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
170 | dependencies:
171 | ms "2.0.0"
172 |
173 | default-user-agent@^1.0.0:
174 | version "1.0.0"
175 | resolved "https://registry.yarnpkg.com/default-user-agent/-/default-user-agent-1.0.0.tgz#16c46efdcaba3edc45f24f2bd4868b01b7c2adc6"
176 | dependencies:
177 | os-name "~1.0.3"
178 |
179 | dev-null@^0.1.1:
180 | version "0.1.1"
181 | resolved "https://registry.yarnpkg.com/dev-null/-/dev-null-0.1.1.tgz#5a205ce3c2b2ef77b6238d6ba179eb74c6a0e818"
182 |
183 | duplexer@~0.1.1:
184 | version "0.1.1"
185 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
186 |
187 | eol@~0.2.0:
188 | version "0.2.0"
189 | resolved "https://registry.yarnpkg.com/eol/-/eol-0.2.0.tgz#2f6db086a243a46e3e5dbd0e13435c7ebebf09dd"
190 |
191 | errno@~0.1.4:
192 | version "0.1.4"
193 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
194 | dependencies:
195 | prr "~0.0.0"
196 |
197 | errors@^0.2.0:
198 | version "0.2.0"
199 | resolved "https://registry.yarnpkg.com/errors/-/errors-0.2.0.tgz#0f51e889daa3e11b19e7186d11f104aa66eb2403"
200 |
201 | escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2:
202 | version "1.0.5"
203 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
204 |
205 | extend@^2.0.0:
206 | version "2.0.1"
207 | resolved "https://registry.yarnpkg.com/extend/-/extend-2.0.1.tgz#1ee8010689e7395ff9448241c98652bc759a8260"
208 |
209 | extend@^3.0.0:
210 | version "3.0.1"
211 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
212 |
213 | for-in@^1.0.1:
214 | version "1.0.2"
215 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
216 |
217 | for-own@^1.0.0:
218 | version "1.0.0"
219 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
220 | dependencies:
221 | for-in "^1.0.1"
222 |
223 | form-data2@^1.0.0:
224 | version "1.0.3"
225 | resolved "https://registry.yarnpkg.com/form-data2/-/form-data2-1.0.3.tgz#cba5e23601a6944d95ab7d7111ff9397a5cb2a4d"
226 | dependencies:
227 | bluebird "^2.8.2"
228 | combined-stream2 "^1.0.2"
229 | debug "^2.1.1"
230 | lodash "^2.4.1"
231 | mime "^1.2.11"
232 | uuid "^2.0.1"
233 |
234 | form-fix-array@^1.0.0:
235 | version "1.0.0"
236 | resolved "https://registry.yarnpkg.com/form-fix-array/-/form-fix-array-1.0.0.tgz#a1347a47e53117ab7bcdbf3e2f3ec91c66769bc8"
237 |
238 | has-ansi@^0.1.0:
239 | version "0.1.0"
240 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e"
241 | dependencies:
242 | ansi-regex "^0.2.0"
243 |
244 | has-ansi@^2.0.0:
245 | version "2.0.0"
246 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
247 | dependencies:
248 | ansi-regex "^2.0.0"
249 |
250 | http-equiv-refresh@^1.0.0:
251 | version "1.0.0"
252 | resolved "https://registry.yarnpkg.com/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz#8ec538866042be5f3f7afa737d198d94beb1b07b"
253 |
254 | humanize-duration@^3.9.1:
255 | version "3.10.1"
256 | resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.10.1.tgz#65b550c0aa095156ecb7c340db44ee0bdf71af4b"
257 |
258 | inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
259 | version "2.0.3"
260 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
261 |
262 | is-browser@^2.0.1:
263 | version "2.0.1"
264 | resolved "https://registry.yarnpkg.com/is-browser/-/is-browser-2.0.1.tgz#8bf0baf799a9c62fd9de5bcee4cf3397c3e7529a"
265 |
266 | is-object@^1.0.1:
267 | version "1.0.1"
268 | resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
269 |
270 | is-stream@^1.0.1:
271 | version "1.1.0"
272 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
273 |
274 | is-string@^1.0.4:
275 | version "1.0.4"
276 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64"
277 |
278 | isarray@0.0.1:
279 | version "0.0.1"
280 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
281 |
282 | isarray@~1.0.0:
283 | version "1.0.0"
284 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
285 |
286 | isbot@^2.0.0:
287 | version "2.0.3"
288 | resolved "https://registry.yarnpkg.com/isbot/-/isbot-2.0.3.tgz#65ca0dff20db6736cd73f1ca6e763788804006ad"
289 |
290 | isobject@^3.0.0:
291 | version "3.0.1"
292 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
293 |
294 | limited-request-queue@^2.0.0:
295 | version "2.0.0"
296 | resolved "https://registry.yarnpkg.com/limited-request-queue/-/limited-request-queue-2.0.0.tgz#14c7c120b138060b19a2a1030abaf6693572650d"
297 | dependencies:
298 | is-browser "^2.0.1"
299 | parse-domain "~0.2.0"
300 |
301 | link-types@^1.1.0:
302 | version "1.1.0"
303 | resolved "https://registry.yarnpkg.com/link-types/-/link-types-1.1.0.tgz#af65e59db52e70c1ffb18ac4c3cb056bfe796830"
304 |
305 | lodash@^2.4.1:
306 | version "2.4.2"
307 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e"
308 |
309 | lru-cache@2.2.x:
310 | version "2.2.4"
311 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d"
312 |
313 | maybe-callback@^2.1.0:
314 | version "2.1.0"
315 | resolved "https://registry.yarnpkg.com/maybe-callback/-/maybe-callback-2.1.0.tgz#8afa0ba7b691a7ab123e7f12f65e32bb5d1f8243"
316 |
317 | mime@^1.2.11:
318 | version "1.3.6"
319 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0"
320 |
321 | minimist@^1.1.0:
322 | version "1.2.0"
323 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
324 |
325 | ms@2.0.0:
326 | version "2.0.0"
327 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
328 |
329 | nopt@^3.0.1:
330 | version "3.0.6"
331 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
332 | dependencies:
333 | abbrev "1"
334 |
335 | nopter@~0.3.0:
336 | version "0.3.0"
337 | resolved "https://registry.yarnpkg.com/nopter/-/nopter-0.3.0.tgz#b9690e6fab8f256b37e4e7ccd23e2b38450cc71f"
338 | dependencies:
339 | caller-path "~0.1.0"
340 | camelcase "^1.0.2"
341 | chalk "~0.5.1"
342 | cli-table "~0.3.1"
343 | eol "~0.2.0"
344 | nopt "^3.0.1"
345 | object-assign "^2.0.0"
346 | splitargs "~0.0.3"
347 |
348 | object-assign@^2.0.0:
349 | version "2.1.1"
350 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
351 |
352 | object-assign@^4.0.1, object-assign@^4.1.0:
353 | version "4.1.1"
354 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
355 |
356 | object.defaults@^1.1.0:
357 | version "1.1.0"
358 | resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
359 | dependencies:
360 | array-each "^1.0.1"
361 | array-slice "^1.0.0"
362 | for-own "^1.0.0"
363 | isobject "^3.0.0"
364 |
365 | os-name@~1.0.3:
366 | version "1.0.3"
367 | resolved "https://registry.yarnpkg.com/os-name/-/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf"
368 | dependencies:
369 | osx-release "^1.0.0"
370 | win-release "^1.0.0"
371 |
372 | os-tmpdir@~1.0.1:
373 | version "1.0.2"
374 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
375 |
376 | osx-release@^1.0.0:
377 | version "1.1.0"
378 | resolved "https://registry.yarnpkg.com/osx-release/-/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c"
379 | dependencies:
380 | minimist "^1.1.0"
381 |
382 | parse-domain@~0.2.0:
383 | version "0.2.2"
384 | resolved "https://registry.yarnpkg.com/parse-domain/-/parse-domain-0.2.2.tgz#188989b1e2e7398bff3c4f4fd7dca157eb51fac1"
385 |
386 | parse5@^3.0.2:
387 | version "3.0.2"
388 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.2.tgz#05eff57f0ef4577fb144a79f8b9a967a6cc44510"
389 | dependencies:
390 | "@types/node" "^6.0.46"
391 |
392 | process-nextick-args@~1.0.6:
393 | version "1.0.7"
394 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
395 |
396 | prr@~0.0.0:
397 | version "0.0.0"
398 | resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
399 |
400 | punycode@^1.4.1:
401 | version "1.4.1"
402 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
403 |
404 | readable-stream@^2.2.2:
405 | version "2.3.3"
406 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
407 | dependencies:
408 | core-util-is "~1.0.0"
409 | inherits "~2.0.3"
410 | isarray "~1.0.0"
411 | process-nextick-args "~1.0.6"
412 | safe-buffer "~5.1.1"
413 | string_decoder "~1.0.3"
414 | util-deprecate "~1.0.1"
415 |
416 | readable-stream@~1.0.17:
417 | version "1.0.34"
418 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
419 | dependencies:
420 | core-util-is "~1.0.0"
421 | inherits "~2.0.1"
422 | isarray "0.0.1"
423 | string_decoder "~0.10.x"
424 |
425 | remark-lint-are-links-valid-core@^0.2.1:
426 | version "0.2.1"
427 | resolved "https://registry.yarnpkg.com/remark-lint-are-links-valid-core/-/remark-lint-are-links-valid-core-0.2.1.tgz#c2cd5dde5535793ea0985de45748db6035f46cc0"
428 | dependencies:
429 | object.defaults "^1.1.0"
430 | unified-lint-rule "^1.0.1"
431 | unist-util-visit "^1.1.3"
432 |
433 | robot-directives@~0.3.0:
434 | version "0.3.0"
435 | resolved "https://registry.yarnpkg.com/robot-directives/-/robot-directives-0.3.0.tgz#174fb1ffc2a9b97877301e87c89b395f429d1f65"
436 | dependencies:
437 | isbot "^2.0.0"
438 | useragent "^2.1.8"
439 |
440 | robots-txt-guard@~0.1.0:
441 | version "0.1.0"
442 | resolved "https://registry.yarnpkg.com/robots-txt-guard/-/robots-txt-guard-0.1.0.tgz#2fd5ec85cbeb4690431e9bbb5c84542f882859e8"
443 |
444 | robots-txt-parse@~0.0.4:
445 | version "0.0.4"
446 | resolved "https://registry.yarnpkg.com/robots-txt-parse/-/robots-txt-parse-0.0.4.tgz#f7d1f323f79921d7e9c6c4bbd25048f6e9810d71"
447 | dependencies:
448 | bluebird "^2.3.5"
449 | split "^0.3.0"
450 | stream-combiner "^0.2.1"
451 | through "^2.3.4"
452 |
453 | safe-buffer@~5.1.0, safe-buffer@~5.1.1:
454 | version "5.1.1"
455 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
456 |
457 | semver@^5.0.1:
458 | version "5.4.1"
459 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
460 |
461 | sliced@^1.0.1:
462 | version "1.0.1"
463 | resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
464 |
465 | split@^0.3.0:
466 | version "0.3.3"
467 | resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
468 | dependencies:
469 | through "2"
470 |
471 | splitargs@~0.0.3:
472 | version "0.0.7"
473 | resolved "https://registry.yarnpkg.com/splitargs/-/splitargs-0.0.7.tgz#fe9f7ae657371b33b10cb80da143cf8249cf6b3b"
474 |
475 | stream-combiner@^0.2.1:
476 | version "0.2.2"
477 | resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858"
478 | dependencies:
479 | duplexer "~0.1.1"
480 | through "~2.3.4"
481 |
482 | stream-length@^1.0.1, stream-length@^1.0.2:
483 | version "1.0.2"
484 | resolved "https://registry.yarnpkg.com/stream-length/-/stream-length-1.0.2.tgz#8277f3cbee49a4daabcfdb4e2f4a9b5e9f2c9f00"
485 | dependencies:
486 | bluebird "^2.6.2"
487 |
488 | string@^3.0.0:
489 | version "3.3.3"
490 | resolved "https://registry.yarnpkg.com/string/-/string-3.3.3.tgz#5ea211cd92d228e184294990a6cc97b366a77cb0"
491 |
492 | string_decoder@~0.10.x:
493 | version "0.10.31"
494 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
495 |
496 | string_decoder@~1.0.3:
497 | version "1.0.3"
498 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
499 | dependencies:
500 | safe-buffer "~5.1.0"
501 |
502 | strip-ansi@^0.3.0:
503 | version "0.3.0"
504 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220"
505 | dependencies:
506 | ansi-regex "^0.2.1"
507 |
508 | strip-ansi@^3.0.0:
509 | version "3.0.1"
510 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
511 | dependencies:
512 | ansi-regex "^2.0.0"
513 |
514 | supports-color@^0.2.0:
515 | version "0.2.0"
516 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
517 |
518 | supports-color@^2.0.0:
519 | version "2.0.0"
520 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
521 |
522 | through2-sink@^1.0.0:
523 | version "1.0.0"
524 | resolved "https://registry.yarnpkg.com/through2-sink/-/through2-sink-1.0.0.tgz#5f106bba1d7330dad3cba5c0ab1863923256c399"
525 | dependencies:
526 | through2 "~0.5.1"
527 | xtend "~3.0.0"
528 |
529 | through2-spy@^1.2.0:
530 | version "1.2.0"
531 | resolved "https://registry.yarnpkg.com/through2-spy/-/through2-spy-1.2.0.tgz#9c891ca9ca40e1e1e4cf31e1ac57f94cc9d248cb"
532 | dependencies:
533 | through2 "~0.5.1"
534 | xtend "~3.0.0"
535 |
536 | through2@~0.5.1:
537 | version "0.5.1"
538 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7"
539 | dependencies:
540 | readable-stream "~1.0.17"
541 | xtend "~3.0.0"
542 |
543 | through@2, through@^2.3.4, through@~2.3.4:
544 | version "2.3.8"
545 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
546 |
547 | tmp@0.0.x:
548 | version "0.0.31"
549 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
550 | dependencies:
551 | os-tmpdir "~1.0.1"
552 |
553 | tough-cookie@^2.3.1:
554 | version "2.3.2"
555 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
556 | dependencies:
557 | punycode "^1.4.1"
558 |
559 | typedarray@^0.0.6:
560 | version "0.0.6"
561 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
562 |
563 | unified-lint-rule@^1.0.1:
564 | version "1.0.3"
565 | resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-1.0.3.tgz#e302b0c4a7ac428c0980e049a500e59528001299"
566 | dependencies:
567 | wrapped "^1.0.1"
568 |
569 | unist-util-is@^2.1.2:
570 | version "2.1.2"
571 | resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db"
572 |
573 | unist-util-visit-parents@^2.0.0:
574 | version "2.0.1"
575 | resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217"
576 | dependencies:
577 | unist-util-is "^2.1.2"
578 |
579 | unist-util-visit@^1.1.3:
580 | version "1.4.0"
581 | resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1"
582 | dependencies:
583 | unist-util-visit-parents "^2.0.0"
584 |
585 | urlcache@~0.6.0:
586 | version "0.6.0"
587 | resolved "https://registry.yarnpkg.com/urlcache/-/urlcache-0.6.0.tgz#6ea63562bce0cc821864d4452cfa07f82b02109c"
588 | dependencies:
589 | urlobj "0.0.8"
590 |
591 | urlobj@0.0.10:
592 | version "0.0.10"
593 | resolved "https://registry.yarnpkg.com/urlobj/-/urlobj-0.0.10.tgz#9103d232dfd8a8d25b15995bae8beec6b9ab995b"
594 | dependencies:
595 | is-object "^1.0.1"
596 | is-string "^1.0.4"
597 | object-assign "^4.1.0"
598 |
599 | urlobj@0.0.8:
600 | version "0.0.8"
601 | resolved "https://registry.yarnpkg.com/urlobj/-/urlobj-0.0.8.tgz#84fda38c2dc867805245c830e5063fb91e026f56"
602 | dependencies:
603 | is-object "^1.0.1"
604 | is-string "^1.0.4"
605 | object-assign "^4.0.1"
606 |
607 | useragent@^2.1.8:
608 | version "2.2.1"
609 | resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.2.1.tgz#cf593ef4f2d175875e8bb658ea92e18a4fd06d8e"
610 | dependencies:
611 | lru-cache "2.2.x"
612 | tmp "0.0.x"
613 |
614 | util-deprecate@~1.0.1:
615 | version "1.0.2"
616 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
617 |
618 | uuid@^2.0.1:
619 | version "2.0.3"
620 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
621 |
622 | win-release@^1.0.0:
623 | version "1.1.1"
624 | resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209"
625 | dependencies:
626 | semver "^5.0.1"
627 |
628 | wrapped@^1.0.1:
629 | version "1.0.1"
630 | resolved "https://registry.yarnpkg.com/wrapped/-/wrapped-1.0.1.tgz#c783d9d807b273e9b01e851680a938c87c907242"
631 | dependencies:
632 | co "3.1.0"
633 | sliced "^1.0.1"
634 |
635 | xtend@~3.0.0:
636 | version "3.0.0"
637 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a"
638 |
--------------------------------------------------------------------------------